ফাইনাল প্রোজেক্ট: একটি মাল্টিথ্রেডেড ওয়েব সার্ভার তৈরি করা (Final Project: Building a Multithreaded Web Server)

এটি একটি দীর্ঘ যাত্রা ছিল, কিন্তু আমরা বইটির শেষে পৌঁছেছি। এই চ্যাপ্টারে, আমরা শেষ অধ্যায়গুলিতে আলোচিত কিছু ধারণা প্রদর্শন করার জন্য এবং পূর্ববর্তী কিছু পাঠ পুনরালোচনা করার জন্য একসাথে আরও একটি প্রোজেক্ট তৈরি করব।

আমাদের ফাইনাল প্রোজেক্টের জন্য, আমরা একটি ওয়েব সার্ভার তৈরি করব যা "hello" বলে এবং একটি ওয়েব ব্রাউজারে চিত্র 21-1 এর মতো দেখায়।

hello from rust

চিত্র 21-1: আমাদের ফাইনাল শেয়ার্ড প্রোজেক্ট

ওয়েব সার্ভার তৈরির জন্য আমাদের পরিকল্পনাটি এখানে দেওয়া হল:

  1. TCP এবং HTTP সম্পর্কে কিছু শিখুন।
  2. একটি সকেটে TCP কানেকশন শুনুন।
  3. অল্প সংখ্যক HTTP রিকোয়েস্ট পার্স করুন।
  4. একটি সঠিক HTTP রেসপন্স তৈরি করুন।
  5. একটি থ্রেড পুল দিয়ে আমাদের সার্ভারের থ্রুপুট উন্নত করুন।

শুরু করার আগে, আমাদের দুটি বিষয় উল্লেখ করা উচিত: প্রথমত, আমরা যে পদ্ধতিটি ব্যবহার করব সেটি Rust-এর সাথে একটি ওয়েব সার্ভার তৈরি করার সর্বোত্তম উপায় হবে না। কমিউনিটির সদস্যরা crates.io-এ উপলব্ধ অনেকগুলি প্রোডাকশন-রেডি ক্রেট প্রকাশ করেছেন যা আমাদের তৈরি করা ওয়েব সার্ভার এবং থ্রেড পুল ইমপ্লিমেন্টেশনের চেয়ে আরও সম্পূর্ণ। যাইহোক, এই চ্যাপ্টারে আমাদের উদ্দেশ্য হল আপনাকে শিখতে সাহায্য করা, সহজ পথ নেওয়া নয়। যেহেতু Rust একটি সিস্টেম প্রোগ্রামিং ভাষা, তাই আমরা যে অ্যাবস্ট্রাকশন লেভেলে কাজ করতে চাই তা বেছে নিতে পারি এবং অন্য ভাষাগুলিতে সম্ভব বা ব্যবহারিক নয় এমন নিম্ন স্তরে যেতে পারি।

দ্বিতীয়ত, আমরা এখানে অ্যাসিঙ্ক এবং অ্যাওয়েট ব্যবহার করব না। একটি থ্রেড পুল তৈরি করা নিজেই একটি যথেষ্ট বড় চ্যালেঞ্জ, এর সাথে অ্যাসিঙ্ক রানটাইম যুক্ত না করেই! যাইহোক, আমরা লক্ষ্য করব কিভাবে অ্যাসিঙ্ক এবং অ্যাওয়েট এই চ্যাপ্টারে আমরা দেখতে পাব এমন কিছু সমস্যার ক্ষেত্রে প্রযোজ্য হতে পারে। চূড়ান্তভাবে, যেমনটি আমরা Chapter 17-এ উল্লেখ করেছি, অনেক অ্যাসিঙ্ক রানটাইম তাদের কাজ পরিচালনার জন্য থ্রেড পুল ব্যবহার করে।

তাই আমরা বেসিক HTTP সার্ভার এবং থ্রেড পুল ম্যানুয়ালি লিখব যাতে আপনি ভবিষ্যতে ব্যবহার করতে পারেন এমন ক্রেটগুলির পিছনের সাধারণ ধারণা এবং কৌশলগুলি শিখতে পারেন।