ASIO C++: पूरी गाइड उदाहरणों के साथ

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ के लिए ASIO लाइब्रेरी का परिचय

ASIO (Asynchronous Input/Output) एक क्रॉस-प्लेटफॉर्म C++ लाइब्रेरी है जो एसिंक्रोनस इनपुट-आउटपुट के लिए शक्तिशाली सुविधाएँ प्रदान करती है। यह डेवलपर्स को सॉकेट, टाइमर, सीरियल पोर्ट और अन्य एसिंक्रोनस इवेंट स्रोतों के साथ हाई-परफॉर्मेंस नेटवर्क एप्लिकेशन बनाने में मदद करती है। यह लाइब्रेरी कई आधुनिक C++ प्रोजेक्ट्स की नींव है, जिसमें Boost.ASIO (Boost का हिस्सा) और standalone ASIO (स्वतंत्र संस्करण) शामिल हैं।

ASIO की आवश्यकता क्यों?

पारंपरिक सिंक्रोनस प्रोग्रामिंग में, हर कॉल ऑपरेशन पूरा होने तक थ्रेड को ब्लॉक कर देता है। यह I/O-bound कार्यों (नेटवर्क, फ़ाइलों के साथ काम) के लिए अक्षम है। ASIO यह समस्या हल करता है:

  • एसिंक्रोनस: ऑपरेशन बैकग्राउंड में चलते हैं, मुख्य थ्रेड को ब्लॉक नहीं करते।
  • स्केलेबिलिटी: एक थ्रेड हजारों कनेक्शन संभाल सकता है (Reactor/Proactor मॉडल)।
  • क्रॉस-प्लेटफॉर्म: Windows (IOCP), Linux (epoll), macOS (kqueue) और अन्य OS पर काम करता है।
  • C++ इंटीग्रेशन: C++11/14/17/20 की आधुनिक सुविधाओं (लैम्ब्डा, स्मार्ट पॉइंटर, कोरूटीन) का उपयोग करता है।

ASIO इंस्टॉलेशन

ASIO दो रूपों में उपलब्ध है: Boost के भाग के रूप में (Boost.ASIO) और standalone लाइब्रेरी के रूप में। standalone संस्करण के लिए इंस्टॉलेशन आसान है:

विकल्प 1: Header-only संस्करण

आधिकारिक वेबसाइट से नवीनतम संस्करण डाउनलोड करें और अनज़िप करें। प्रोजेक्ट में शामिल करें:

#define ASIO_STANDALONE
#include "asio.hpp"

CMakeLists.txt में:

add_definitions(-DASIO_STANDALONE)
include_directories(/path/to/asio/include)

विकल्प 2: पैकेज मैनेजर (vcpkg) के माध्यम से

vcpkg install asio

विकल्प 3: Boost.ASIO

#include <boost/asio.hpp>
// लिंकिंग: -lboost_system -lpthread (Linux पर)

महत्वपूर्ण: उदाहरणों को कंपाइल करने के लिए Linux/macOS पर -lpthread फ्लैग और Windows पर ws2_32.lib के साथ लिंकिंग आवश्यक है।

त्वरित शुरुआत: पहला एसिंक्रोनस टाइमर

क्लासिक उदाहरण से शुरू करते हैं — एक एसिंक्रोनस टाइमर जो 5 सेकंड बाद मैसेज प्रिंट करता है:

#define ASIO_STANDALONE
#include <iostream>
#include "asio.hpp"

int main() {
    asio::io_context io; // एसिंक्रोनस ऑपरेशन प्रबंधित करने वाला ऑब्जेक्ट

    asio::steady_timer timer(io, asio::chrono::seconds(5));
    
    // लैम्ब्डा फंक्शन के साथ एसिंक्रोनस प्रतीक्षा
    timer.async_wait([&](const asio::error_code& ec) {
        if (!ec) {
            std::cout << "5 सेकंड हो गए!" << std::endl;
        }
    });

    std::cout << "टाइमर शुरू..." << std::endl;
    io.run(); // जब तक एसिंक्रोनस ऑपरेशन हैं, तब तक ब्लॉक करता है
    return 0;
}

व्याख्या:

  • asio::io_context — लाइब्रेरी का मुख्य भाग, इवेंट क्यू प्रबंधित करता है।
  • asio::steady_timer — मोनोटोनिक समय में काम करने वाला टाइमर।
  • async_wait — एसिंक्रोनस प्रतीक्षा शुरू करता है। टाइमर बजने पर दिया गया फंक्शन कॉल होता है।
  • io.run() — इवेंट प्रोसेसिंग लूप शुरू करता है। सभी ऑपरेशन पूरे होने तक थ्रेड को ब्लॉक करता है।

ASIO के मुख्य तरीके और फंक्शन (10 महत्वपूर्ण)

1. asio::io_context::run()

क्या करता है: मुख्य इवेंट प्रोसेसिंग लूप शुरू करता है। वर्तमान थ्रेड को ब्लॉक करता है और सभी एसिंक्रोनस ऑपरेशन प्रोसेस करता है, जब तक सभी हैंडलर पूरे न हो जाएँ या stop() कॉल न हो।

पैरामीटर: कोई नहीं।

रिटर्न: प्रोसेस किए गए हैंडलर की संख्या।

उदाहरण:

asio::io_context io;
io.post([](){ std::cout << "Hello"; });

अनुशंसाएँ