ইয়েসডে ব্যতিক্রম


93

আমি একটি ডেমন তৈরি করেছি যা খুব আদিম রূপ ব্যবহার করেছিল ipc(টেলনেট এবং একটি স্ট্রিং পাঠান যাতে নির্দিষ্ট ক্রমে নির্দিষ্ট শব্দ থাকে)। আমি এড়িয়ে গেলাম এবং এখন JSONএকটি Yesodসার্ভারে বার্তা প্রেরণ করতে ব্যবহার করছি । যাইহোক, আমার নকশা সম্পর্কে কিছু জিনিস সত্যই আমি পছন্দ করেছি এবং আমার পছন্দগুলি এখন কী তা নিশ্চিত।

আমি যা করছিলাম তা এখানে:

buildManager :: Phase -> IO ()
buildManager phase = do
  let buildSeq = findSeq phase
      jid = JobID $ pack "8"
      config = MkConfig $ Just jid
  flip C.catch exceptionHandler $ 
  runReaderT (sequence_ $ buildSeq <*> stages) config
  -- ^^ I would really like to keep the above line of code, or something like it.
  return ()

বিল্ডসেক-এর প্রতিটি ফাংশন এর মতো দেখায়

foo :: Stage -> ReaderT Config IO ()

data Config = MkConfig (Either JobID Product) BaseDir JobMap

JobMapএটি এমন একটি TMVar Mapযা বর্তমান কাজ সম্পর্কে তথ্য ট্র্যাক করে।

সুতরাং এখন, আমার যা আছে হ্যান্ডলারগুলি হ'ল এটি সমস্তর মতো দেখতে

foo :: Handler RepJson

foo আমার ডিমনটির জন্য একটি কমান্ড উপস্থাপন করে, প্রতিটি হ্যান্ডলারের একটি আলাদা জেএসওএন অবজেক্টটি প্রক্রিয়া করতে হতে পারে।

আমি যা করতে চাই তা হ'ল একটি JSONঅবজেক্ট যা সাফল্যের প্রতিনিধিত্ব করে এবং অন্য জেএসওএন অবজেক্ট যা কিছু ব্যতিক্রম সম্পর্কে তথ্য প্রেরণ করে।

আমি চাই fooগুলি সাহায্যকারী ফাংশন একটি আসতে পাবে Either, কিন্তু আমি নিশ্চিত নই আমি, যে পেতে, প্লাস কর্মের আমার তালিকা মূল্যায়ন বিনষ্ট করার ক্ষমতা buildSeq

এখানে আমি দেখতে একমাত্র পছন্দ

1) exceptionHandlerহ্যান্ডলারের মধ্যে আছে তা নিশ্চিত করুন । রাখুন JobMapমধ্যে Appরেকর্ড। ব্যতিক্রম সম্পর্কিত বিশদটি নির্দেশ getYesodকরতে উপযুক্ত মান পরিবর্তন করে ব্যবহার JobMapকরুন যা এর পরে প্রবেশ করা যেতে পারেfoo

একটি ভাল উপায় আছে কি?

আমার অন্যান্য পছন্দ কি?

সম্পাদনা করুন: স্পষ্টতার জন্য, আমি এর ভূমিকাটি ব্যাখ্যা করব Handler RepJson। কমান্ডগুলি গ্রহণ করার জন্য সার্ভারের কিছু উপায় প্রয়োজন build stop report। ক্লায়েন্টের এই কমান্ডগুলির ফলাফল জানার কিছু উপায় প্রয়োজন। সার্ভার এবং ক্লায়েন্ট একে অপরের সাথে যোগাযোগের মাধ্যম হিসাবে আমি জেএসএনকে বেছে নিয়েছি। আমি হ্যান্ডলারের ধরণটি কেবল JSON ইন / আউট পরিচালনা করতে এবং আরও কিছু না ব্যবহার করতে চাই।

উত্তর:


9

দার্শনিকভাবে বলতে গেলে, হাস্কেল / ইয়েসোড বিশ্বে আপনি মানগুলি পিছনে ফিরিয়ে না দিয়ে এগিয়ে যেতে চান। সুতরাং হ্যান্ডলারের কোনও মূল্য ফেরত দেওয়ার পরিবর্তে, তাদের প্রক্রিয়াটির পরবর্তী ধাপে এগিয়ে আসতে বলুন, এটি একটি ব্যতিক্রম উত্পন্ন করতে পারে।

মনে রাখবেন যে আপনি ভবিষ্যতের যে কোনও পরিমাণ ক্রিয়াকলাপ একটি একক বস্তুতে বান্ডিল করতে পারেন, তাই আপনি আপনার হ্যান্ডলার এবং foos এর কাছে একটি ধারাবাহিক বস্তু পাস করতে পারেন যা মূলত তাদের বলে, "আপনার কাজ শেষ হওয়ার পরে এই ব্লব কোডটি চালান।" এইভাবে তারা অকার্যকর হতে পারে এবং কিছুই ফিরিয়ে দিতে পারে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.