Hyperlane-এ 𝗣𝗿𝗼𝗹𝗼𝗴𝘂𝗲 𝗮𝗻𝗱 𝗘𝗽𝗶𝗹𝗼𝗴𝘂𝗲 𝗠𝗮𝗰𝗿𝗼𝘀

Middleware হলো Hyperlane-এ রিকোয়েস্ট প্রসেসিংয়ের মেরুদণ্ড। বেশিরভাগ মানুষ স্ট্যান্ডার্ড রিকোয়েস্ট এবং রেসপন্স মিডলওয়্যার ব্যবহার করেন। তবে, অতিরিক্ত নিয়ন্ত্রণের জন্য Hyperlane বিশেষায়িত prologue এবং epilogue macros প্রদান করে।

এই macro গুলো রিকোয়েস্ট লাইফসাইকেলের একেবারে শুরুতে এবং একেবারে শেষে চলে। এগুলো আপনাকে ঠিক কখন ডেটা ক্লায়েন্টের কাছে পৌঁছাবে তা নিয়ন্ত্রণ করতে দেয়।

রিকোয়েস্ট লাইফসাইকেল (The Request Lifecycle):

• রিকোয়েস্ট আসে: সার্ভার HTTP রিকোয়েস্ট গ্রহণ করে। • Prologue ফেজ: আপনি হেডার বা স্ট্যাটাস কোডের মতো প্রাথমিক ডেটা পাঠান। • Middleware চেইন: ফাংশনগুলো রিকোয়েস্ট প্রসেস করে। • Route handler: সিস্টেম রেসপন্স তৈরি করে। • Response middleware: ফাংশনগুলো রেসপন্স প্রসেস করে। • Epilogue ফেজ: চূড়ান্ত ডেটা ক্লায়েন্টের কাছে ফ্লাশ (flush) করা হয় এবং কানেকশন বন্ধ হয়ে যায়।

ধাপ ২ এবং ৬ পরিচালনা করতে এই macro গুলো ব্যবহার করুন।

Send Macros:

নন-ক্রিটিক্যাল ডেটার জন্য #[try_send] ব্যবহার করুন। যদি কানেকশন বিচ্ছিন্ন হয়ে যায়, তবে এটি সিস্টেম ক্র্যাশ না করেই এরর হ্যান্ডেল করে। এটি স্ট্রিমিংয়ের জন্য উপযোগী যেখানে একটি চাঙ্ক (chunk) হারিয়ে গেলেও কোনো সমস্যা নেই।

ক্রিটিক্যাল ডেটার জন্য #[send] ব্যবহার করুন। এটি নিশ্চিত করে যে ডেটা অবশ্যই পৌঁছাবে।

Flush Macros:

বাফার ক্লিয়ার করার চেষ্টা করতে এবং এররগুলো সুন্দরভাবে হ্যান্ডেল করতে #[try_flush] ব্যবহার করুন।

সমস্ত বাফার করা ডেটা ক্লায়েন্টের কাছে পাঠানোর জন্য জোরপূর্বক #[flush] ব্যবহার করুন। কানেকশন বন্ধ করার আগে ডেটা লস রোধ করতে এটি ব্যবহার করুন।

সেরা অনুশীলনসমূহ (Best Practices):

  • কানেকশন বিচ্ছিন্ন হলে ক্র্যাশ এড়াতে স্ট্রিমিং ডেটার জন্য #[try_send] ব্যবহার করুন।
  • যখন ডেটা ডেলিভারি বাধ্যতামূলক, তখন #[send] ব্যবহার করুন।
  • কানেকশন বন্ধ করার আগে সর্বদা আপনার বাফার ফ্লাশ করুন।
  • কানেকশন পুনরায় ব্যবহারের (reuse) জন্য আপনার epilogue-এ stream.is_keep_alive() চেক করুন।
  • রিয়েল-টাইম আপডেট পাঠানোর জন্য Server-Sent Events (SSE)-এ এই macro গুলো ব্যবহার করুন।
  • সিস্টেম ফেইলিওর রোধ করতে সমস্ত send এবং flush এরর হ্যান্ডেল করুন।

এই টুলগুলো আপনাকে ডেটা ফ্লো এবং রেসপন্স টাইমিংয়ের ওপর নিখুঁত নিয়ন্ত্রণ দেয়।

Source: https://dev.to/tengxgfyrz67s/prologue-and-epilogue-macros-1n29 Project Code: https://github.com/hyperlane-dev/hyperlane