विषय पर बढ़ें

अंतिम अद्यतन:2026-10-12

C++20 coroutine HTTP server

Modern C++ HTTP server

हाल में 星球 के दोस्त अक्सर पूछते रहते थे कि कोई network से जुड़ा project है क्या, इसलिए modern C++ + CMake managed एक पूरा project लिखा।

इस project में निम्न विशेषताएँ हैं:

  • बड़ी मात्रा में modern C++ features
  • C++20 से संबंधित
    • cortouine
    • concept
    • std::format
    • std::span
  • C++17 से संबंधित
    • if statement initialization
    • structured bindings
    • optional
  • Efficient event-driven mechanism
  • epoll से event loop implement किया गया है, जो बड़ी संख्या में client connections manage करता है। epoll, Linux platform पर high concurrency I/O handle करने का efficient tool है, यह एक साथ कई file descriptors के events monitor कर सकता है, जिससे system call overhead प्रभावी रूप से घटता है और I/O operations की concurrency बढ़ती है।
  • Server main event loop में non-blocking epoll_wait से connection events monitor करता है, जिससे traditional blocking I/O वाली performance bottleneck से बचा जाता है।
  • Coroutines और asynchronous programming
  • C++20 coroutines अपनाकर asynchronous tasks का implementation सरल किया गया, जो synchronous code जैसी लिखाई देता है, जिससे code का logic और साफ़ रहता है। Project में co_await से client data का asynchronous पढ़ना-लिखना किया गया, जिससे thread context switching का overhead घटा।
  • SocketAwaiter और AsyncSocketOperation दो classes implement की गईं, जो socket के asynchronous read/write operations wrap करती हैं, जिससे asynchronous processing code लिखना और भी सरल और स्वाभाविक हो गया।
  • File I/O operations का asynchronous handling
  • Server HTML फ़ाइलों की सामग्री asynchronously पढ़ने का समर्थन करता है, std::async से asynchronous file reading की जाती है, जिससे main thread block नहीं होता और client requests का जवाब और तेज़ी से दिया जाता है।
  • Request handle करते समय, ज़रूरी फ़ाइलें asynchronously पढ़कर memory में cache की जाती हैं, जिससे I/O operations का performance पर पड़ने वाला असर घटता है।
  • Non-blocking socket operations
  • fcntl से socket को non-blocking mode में सेट किया गया, जिससे accept और read/write operations server के main thread को block नहीं करते। यह high concurrency scenarios में विशेष रूप से ज़रूरी है, इससे server की concurrent processing क्षमता काफ़ी बढ़ जाती है।

Project का परिणाम:

सीखने का तरीका: विस्तृत documentation + code उपलब्ध है, अलग से खरीदने के लिए नीचे दिए WeChat से संपर्क करें या 星球 join करें।

संबंधित विषय

टिप्पणियाँ