Rust-এ HTTP-এর বাইরে: রিয়েল-টাইম সকেট এবং FTP
বেশিরভাগ কাজের জন্য HTTP চমৎকার। কিন্তু দুটি নির্দিষ্ট ক্ষেত্রে এটি সীমাবদ্ধ।
১. রিয়েল-টাইম পুশ (Real-time push)। কোনো কিছু ঘটার সাথে সাথে ব্রাউজারকে তা জানানো প্রয়োজন। Raw WebSockets কাজ করে, তবে রিকানেকশন (reconnection) এবং রাউটিংয়ের (routing) সমস্ত লজিক আপনাকে নিজেই লিখতে হবে। JavaScript ডেভেলপারদের জন্য Socket.IO একটি স্ট্যান্ডার্ড, কিন্তু সম্প্রতি কিছু না আসা পর্যন্ত Rust-এ এর কোনো ভালো সার্ভার ইমপ্লিমেন্টেশন ছিল না।
২. FTP-এর মাধ্যমে ফাইল ট্রান্সফার। লিগ্যাসি সিস্টেম (Legacy systems) এবং মিডিয়া পাইপলাইনগুলোতে সবখানেই FTP ব্যবহৃত হয়। Rust async ইকোসিস্টেমে দীর্ঘ সময় ধরে এখানে একটি ঘাটতি ছিল।
এই পোস্টটি আপনাকে দেখাবে কীভাবে এই ঘাটতিগুলো পূরণ করা যায়। আমরা একটি Socket.IO সার্ভার এবং একটি FTP সার্ভার তৈরি করব। তারপর আমরা সেগুলোকে সংযুক্ত করব। যখন FTP-এর মাধ্যমে কোনো ফাইল আপলোড করা হবে, সিস্টেমটি সাথে সাথে প্রতিটি সংযুক্ত ব্রাউজারকে নোটিফাই করবে।
আমরা যে টুলগুলো ব্যবহার করছি:
• Socketioxide: Socket.IO-এর Rust ইমপ্লিমেন্টেশন। এটি Node.js বা Python-এর মতো যেকোনো Socket.IO ক্লায়েন্টের সাথে কাজ করে। • Libunftp: কম্পোজেবল (composable) FTP সার্ভার তৈরির একটি টুল। • Suppaftp: Rust-এর জন্য একটি async FTP ক্লায়েন্ট।
মূল বৈশিষ্ট্যসমূহ:
- Socket.IO Rooms: আপনি কানেকশনগুলোকে গ্রুপ করতে পারেন। যখন কোনো নির্দিষ্ট ফোল্ডারে ফাইল আপলোড করা হয়, তখন আপনি শুধুমাত্র সেই রুমের ব্যবহারকারীদের নোটিফাই করতে পারেন।
- Restricted FTP: আমরা ক্ষতিকারক কাজগুলো (destructive actions) ব্লক করার জন্য একটি কাস্টম র্যাপার (wrapper) তৈরি করেছি। ব্যবহারকারীরা ফাইল আপলোড এবং ডাউনলোড করতে পারবেন, কিন্তু সেগুলো ডিলিট বা রিনেম করতে পারবেন না।
- Async Integration: FTP সার্ভারকে Socket.IO সার্ভারের সাথে সংযুক্ত করতে আমরা একটি broadcast channel ব্যবহার করেছি।
কাজের ধারা (Workflow):
১. FTP ক্লায়েন্ট FTP সার্ভারে একটি ফাইল আপলোড করে। ২. FTP সার্ভার একটি broadcast ইভেন্ট ট্রিগার করে। ৩. Socket.IO সার্ভার ইভেন্টটি গ্রহণ করে। ৪. Socket.IO সার্ভার ব্রাউজারে একটি "file_uploaded" ইভেন্ট পাঠায় (emits)।
এই প্যাটার্নটি শুধুমাত্র ফাইলের জন্যই নয়, আরও অনেক ক্ষেত্রে ব্যবহার করা যেতে পারে। আপনি এটি জব কমপ্লিশন অ্যালার্ট (job completion alerts), লাইভ ডেটা আপডেট বা ডেপ্লয়মেন্ট ড্যাশবোর্ডের জন্য ব্যবহার করতে পারেন।
সম্পূর্ণ কোডটি GitHub-এ উপলব্ধ।