সাধারণ C++ ওয়েব সার্ভার

Sadharana C Oyeba Sarbhara



এই নিবন্ধে, আমরা C++ এ ওয়েব সার্ভার সম্পর্কে জানব। ওয়েব সার্ভারের মূল উদ্দেশ্য হল আগত HTTP অনুরোধগুলি পরিচালনা করা, সমস্ত আগত অনুরোধগুলি প্রক্রিয়া করা এবং বিনিময়ে ওয়েব HTML সামগ্রীর সাথে সাড়া দেওয়া। নেটওয়ার্কিং যোগাযোগ এবং সমস্যাগুলি পরিচালনা করার জন্য আমাদের শুধুমাত্র C++ পরিবেশে নেটওয়ার্কিং লাইব্রেরি যোগ করে 'সকেট'-এর মতো ওয়েব সার্ভারটি বজায় রাখতে হবে। একটি ওয়েব সার্ভার হল ইন্টারনেটের মেরুদণ্ড এবং ব্যবহারকারী এবং প্রধান সার্ভারের মধ্যে যোগাযোগের একটি উপায়। সঠিক উদাহরণ বাস্তবায়নের মাধ্যমে একটি সাধারণ ওয়েব সার্ভার তৈরির প্রক্রিয়াটি মূল্যায়ন করা যাক।

পরিবেশ স্থাপন করা

আমাদের প্রথমে আমাদের পরিবেশে সমস্ত প্রয়োজনীয় বিকল্পগুলি সেট আপ করতে হবে। ইনকামিং HTTP অনুরোধগুলি শোনার জন্য আমাদের সকেটগুলি ব্যবহার করতে হবে। এর পরে, আমরা আমাদের সিস্টেম হিসাবে হোস্ট মেশিনের নির্দিষ্ট পোর্টে সকেটটিকে আবদ্ধ করি। এর পরে, যখন ক্লায়েন্টরা অনুরোধের জন্য কল করে, সার্ভার এই আগত সংযুক্ত অনুরোধগুলি শোনে। সার্ভার ব্যবহারকারীর অনুরোধ সার্ভারে আনতে HTTP অনুরোধের মাধ্যমে ব্যবহারকারীর অনুরোধে সাড়া দেয়। এর পরে, সার্ভার অনুরোধটি পরিচালনা করে এবং যথাযথ ক্রাফটিং সহ ব্যবহারকারীকে HTTP প্রতিক্রিয়া ফেরত দেয়।







ওয়েব সার্ভারের সকেট হ্যান্ডলিং

এই সেশনে, আমরা শিখব যে সকেট আমাদের সিস্টেমে চলা বিভিন্ন প্রক্রিয়ার মধ্যে যোগাযোগ তৈরি করে। সকেটগুলি মূলত ক্লায়েন্টের ব্রাউজার এবং আমাদের সার্ভারের মধ্যে যোগাযোগ বা সংযোগ তৈরি করতে ব্যবহৃত হয়। সকেটের সংযোগটি C++ তে তৈরি করা হয়েছে যেভাবে নিচে উল্লেখ করা হয়েছে:



এখানে, আমরা সকেটের জন্য লাইব্রেরিগুলিকে '#include ' হিসাবে সংজ্ঞায়িত করব। প্রধান ফাংশনে, আমরা 'server_fd' শুরু করে সকেট তৈরি করি। এর পরে, আমরা 'সার্ভার_এফডি' এর মান পরীক্ষা করি যাতে স্টক সংযোগের বৈধতা রয়েছে। যদি সার্ভারটি ডাউন থাকে এবং ভালোভাবে কাজ না করে তবে এটি 'সকেট তৈরি ব্যর্থ হয়েছে' বার্তাটি ফেরত বা প্রদর্শন করে। অন্যথায়, যে মেসেজে ওয়েব সার্ভারের আইপি অ্যাড্রেস আছে সেটি ওয়েব সার্ভারে এইচটিএমএল-এর ডেটা দেখাবে।



# অন্তর্ভুক্ত করুন
#include
#include
int প্রধান ( ) {
int server_fd = সকেট ( AF_INET, SOCK_STREAM, 0 ) ;
যদি ( সার্ভার_এফডি == - 1 ) {
std::cerr << 'সকেট তৈরি ব্যর্থ হয়েছে' ;
ফিরে -1 ;
}
// অন্য
// {
// std::cout << 'প্রস্থান' ;
// }
// বাঁধাই করা
std::cout << 'http//:127.0.0.1:8080' ;
// আরও কোড এখানে যায়
ফিরে 0 ;
}


এই কোডের আউটপুট নিম্নলিখিত সংযুক্ত করা হয়েছে:






এটি দেখায় যে সকেটটি ওয়েব সার্ভারের সাথে সংযোগ করতে C++ এ সফলভাবে তৈরি হয়েছে।

C++ এ ওয়েব সার্ভার হ্যান্ডলিং

সিস্টেমের ওয়েব সার্ভারটি বিভিন্ন C++ ধারণাগুলি পরিচালনা করার জন্য সেট আপ করা হয়েছে যেমন মার্জ সর্টিং, লিনিয়ার সর্টিং, ইত্যাদি। গুরুত্বপূর্ণ নেটওয়ার্কিং লাইব্রেরিগুলি শুরু করতে মনে রাখবেন। ওয়েব সার্ভার স্থানীয় মেশিনে চলে (127.0.0.1) এবং পোর্ট 8080 এ শোনে।



C++ প্রোগ্রামিং ভাষায় প্রয়োজনীয় লাইব্রেরিগুলিকে নিম্নরূপ অন্তর্ভুক্ত করুন:

# অন্তর্ভুক্ত < প্রচার করা / asio.hpp >


মনে রাখবেন যে C++ এ একটি ওয়েব সার্ভার তৈরি করা একটি সহজ এবং সময়সাপেক্ষ প্রক্রিয়া নয়। আমরা 'async_accept' ব্যবহার করে আগত সংযোগগুলি পরিচালনা করতে পারি।

ওয়েব সার্ভারে C++ কোডে সার্ভারের প্রতিক্রিয়া

সার্ভারের প্রতিক্রিয়া অবশ্যই HTTP হতে হবে যা ব্রাউজারে কাজ করে এবং ওয়েব পৃষ্ঠার HTML ভিউতে আউটপুট দেখায়। সমস্ত লাইব্রেরি সার্ভারগুলি পরিচালনা করে এবং সমস্ত বৈধ অনুরোধগুলি পরিচালনা করে।

ওয়েব সার্ভারের বাইন্ডিং এবং লিসেনিং

এরপরে, ওয়েব পৃষ্ঠায় কোডটি সহজে কার্যকর করতে আমাদের ওয়েব সার্ভারের বাঁধাই এবং শোনার বিষয়ে জানতে হবে। এর পরে, আমাদের সিস্টেমের প্রদত্ত ঠিকানার সাথে সকেটটিকে আবদ্ধ করতে হবে, মূলত আইপি ঠিকানা এবং পোর্ট যেখানে এই সকেটগুলি সক্রিয় রয়েছে। বন্দরে, আমরা ইনকামিং সংযোগের জন্য শুনতে শুরু করি।

আবদ্ধ এবং লিঙ্ক করার জন্য আমাদের কয়েকটি লাইব্রেরি শুরু করতে হবে।

Sockaddr_in ঠিকানা;


আমরা সার্ভার বাঁধাই করতে পারেন. সার্ভার ডাউন থাকলে বা কানেক্ট না থাকলে, বার্তাটি কোনো ব্রাউজারের ওয়েব পেজে প্রদর্শিত হয় না।

ওয়েব সার্ভারের সাথে সংযোগগুলি গ্রহণ করা

এই বিভাগে, আমরা শিখব কিভাবে আমরা ক্লায়েন্টের অনুরোধের প্রবাহ নিয়ন্ত্রণ করতে পারি। সার্ভার HTTP প্রোটোকলের মাধ্যমে সমস্ত ক্লায়েন্ট অনুরোধ গ্রহণ করে। সার্ভার সকেট ক্লায়েন্ট থেকে ওয়েব সার্ভারে প্রাপ্ত বার্তার আকার নির্দেশ করে। বার্তাটিতে সার্ভার সকেট সংযোগ এবং ঠিকানা আরও স্পষ্ট এবং অনন্যভাবে রয়েছে। ব্যবহারকারীর সকেট পাওয়া গেলে বা না পাওয়া গেলে সার্ভারের প্রতিক্রিয়া জানাতে হবে কিনা আমরা পরীক্ষা করি। ব্যবহারকারীর সকেট সংযোগ পাওয়া না গেলে, আমরা একটি ওয়েব সার্ভারের সাথে সংযোগ গ্রহণ করতে পারি না।

ব্যবহারকারী এবং সার্ভার এন্ড থেকে ডেটা পাঠানো এবং গ্রহণ করার পদ্ধতি

সকেট লিঙ্কগুলি তৈরি করা এবং সংযোগ গ্রহণ করার পরে, পরবর্তী জিনিসটি সার্ভার সাইডে ডেটা প্রেরণ করা এবং বিভিন্ন কীওয়ার্ড ব্যবহার করে সার্ভার থেকে ডেটা গ্রহণ করা এবং C++ এ ডেটা প্রেরণ এবং গ্রহণের সাথে সম্পর্কিত ফাংশনগুলি তৈরি করা। এখানে, আমরা ডেটার প্রতিক্রিয়া পরীক্ষা করি। এই অনুরোধ কি ডেটা পেতে নাকি ওয়েব সার্ভার থেকে ডেটা পোস্ট করার জন্য? আমরা ক্লায়েন্টের অনুরোধের প্রতিক্রিয়া স্থিতি পরীক্ষা করি। ওয়েব সার্ভারে বার্তা বা আউটপুট প্রদর্শনের জন্য আমরা অস্থায়ীভাবে সমস্ত ক্লায়েন্ট অনুরোধগুলি বাফারে সংরক্ষণ করি।

C++ এ লিনিয়ার বাছাই

চলুন এখানে রৈখিক বাছাই করা যাক এবং ওয়েব সার্ভারে সহজে রৈখিক সাজানোর ফলাফল প্রদর্শন করা যাক। রৈখিক সাজানোর কোড স্নিপেট নিম্নলিখিত সংযুক্ত করা হয়েছে:

#অন্তর্ভুক্ত করুন
নামস্থান std ব্যবহার করে;
অকার্যকর লিনিয়ার সার্চ ( int arr [ ] , int লেন, int আইটেম ) {
জন্য ( int i = 0 ;i < len;i++ ) {
যদি ( arr [ i ] == আইটেম ) {
cout << আইটেম << 'সূচীতে পাওয়া গেছে:' << i;
ফিরে ;
}
}
cout << 'পাওয়া যায়নি' ;
}
int প্রধান ( ) {
int arr [ ] = { 10 , 5 , পনের , একুশ , - 3 , 7 } ;
int len ​​= sizeof ( arr ) / আকার ( arr [ 0 ] ) ;
int আইটেম = একুশ ;
লিনিয়ার সার্চ ( arr, len, আইটেম ) ;
ফিরে 0 ;
}


এই উদাহরণে, আমরা আইটেমটি অনুসন্ধান করি '21' কোন সূচকে। সুতরাং, আমরা এই কোড রান. এই কোডের আউটপুট নিম্নলিখিত সংযুক্ত করা হয়েছে:


এই আউটপুটটি এখন ওয়েব সার্ভারে খোলা আছে যেমন ক্রোম, এজ ইত্যাদি যেকোনো ব্রাউজারে।

আউটপুট প্রদর্শনের পরে সমস্ত সংযোগ বন্ধ করুন

এটি একটি ওয়েব সার্ভারে ডেটা পরিচালনার শেষ ধাপ। প্রয়োজনীয় আউটপুট সম্পাদন করার পরে সকেট সংযোগগুলি বন্ধ করতে ভুলবেন না। আমরা এখানে 'close(server_id)' এবং 'close (client socket)' এর মত ফাংশন ব্যবহার করে সকেট বন্ধ করি।

সার্ভার চালানোর শেষে, প্রত্যাশিত আউটপুট 'http//localhost:8080' হিসাবে ঠিকানা অ্যাক্সেস করে ওয়েব পৃষ্ঠায় প্রদর্শিত হয়।

উপসংহার

এই নিবন্ধের শেষে, আমরা বলতে পারি যে C++-এ সরল ওয়েব সার্ভার পরিচালনা সত্যিই জটিল এবং HTTP ক্লায়েন্টের অনুরোধ পাঠাতে এবং গ্রহণ করার জন্য সম্পূর্ণ ঘনত্বের প্রয়োজন। ওয়েব পৃষ্ঠায় গতিশীলভাবে বিষয়বস্তু প্রদর্শন করতে আমরা ওয়েব সার্ভার কার্যকারিতা প্রসারিত করতে পারি। আশা করি, এই নিবন্ধটি আপনার জন্য সহায়ক, এবং আপনি C++ এ একটি সাধারণ ওয়েব সার্ভার তৈরি করতে প্রয়োজনীয় পদক্ষেপগুলি বুঝতে আপনার পরিবেশে এই উদাহরণগুলি চালাতে পারেন।