अंतिम अद्यतन: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/writeoperations server के main thread को block नहीं करते। यह high concurrency scenarios में विशेष रूप से ज़रूरी है, इससे server की concurrent processing क्षमता काफ़ी बढ़ जाती है।
Project का परिणाम:
सीखने का तरीका: विस्तृत documentation + code उपलब्ध है, अलग से खरीदने के लिए नीचे दिए WeChat से संपर्क करें या 星球 join करें।
संबंधित विषय¶
- खुद C++ FnOnce लिखना | C++那些事
- C++ gRPC छोटा project | C++那些事
- C++ inter-process communication व्यवहार | C++那些事
- C++ short URL service Demo | C++那些事
- C++17 और SQLite से directory का size निकालना | C++那些事
- Google Benchmark performance testing | C++那些事
- Protobuf ZeroCopy serialization | C++那些事
- pybind11 से Python तेज़ करना | C++那些事
- C++ stack calculator design | C++那些事