0Pricing
C++ Academy · Lektion

Modernes asynchrones I/O mit Boost Asio

Verwenden Sie Boost.Asio für portables, modernes asynchrones I/O.

Modernes asynchrones I/O mit Boost Asio ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Boost.Asio

Boost.Asio ist die De-facto-C++-Bibliothek für asynchrones I/O. Sie ist plattformübergreifend, weitgehend header-only und wird von zahlreichen Produktivdiensten eingesetzt.

Der io_context

Das Zentrum von Asio ist boost::asio::io_context – die Ereignisschleife. Alle asynchronen Operationen laufen darüber.

#include <boost/asio.hpp>
namespace asio = boost::asio;

asio::io_context io;
// register async operations...
io.run();

Acceptors und Sockets

Ein ip::tcp::acceptor lauscht auf eingehende Verbindungen; ein ip::tcp::socket verarbeitet einzelne Verbindungen.

asio::ip::tcp::acceptor acceptor(io,
    {asio::ip::tcp::v4(), 8080});
asio::ip::tcp::socket socket(io);
acceptor.async_accept(socket, [&](auto err) {
    if (!err) handle(std::move(socket));
});

Callback-Stil

Asynchrone Operationen erhalten einen Completion-Handler, typischerweise eine Lambda-Funktion. Der Handler läuft auf dem io_context-Thread, sobald die Operation abgeschlossen ist.

asio::async_read(socket, asio::buffer(buf),
    [](auto err, size_t n) {
        if (!err) std::cout << "read " << n << " bytes";
    });

Coroutine-Stil (C++20)

Modernes Asio unterstützt C++20-Koroutinen – Code, der wie synchroner Code aussieht, aber asynchron ausgeführt wird.

asio::awaitable<void> handle(asio::ip::tcp::socket sock) {
    char buf[1024];
    auto n = co_await sock.async_read_some(asio::buffer(buf), asio::use_awaitable);
    co_await asio::async_write(sock, asio::buffer(buf, n), asio::use_awaitable);
}

Strands für Thread-Sicherheit

Führen Sie mehrere io_context-Threads aus, verwenden Sie jedoch einen strand, um Handler zu serialisieren, die auf dieselben Daten zugreifen – so ermöglichen Sie eine sichere Verarbeitung ohne Locks.

Timer

Asio enthält Timer, die in den io_context integriert sind. Planen Sie Arbeit zur Ausführung nach einer Verzögerung ein.

asio::steady_timer timer(io, std::chrono::seconds(5));
timer.async_wait([](auto err) {
    std::cout << "5 seconds passed";
});

Puffer

asio::buffer kapselt Speicher für I/O und funktioniert mit Vektoren, Arrays und Strings.

std::vector<char> data(1024);
async_read(sock, asio::buffer(data), handler);

Fehlerbehandlung

Asynchrone Handler erhalten einen error_code. Verwenden Sie ihn statt Ausnahmen für erwartete Fehler (Verbindungsabbruch, Timeout).

Standalone Asio

Asio ist auch als eigenständige Bibliothek ohne Boost-Abhängigkeit verfügbar – nützlich für Projekte, die Boost vermeiden möchten.

Leistung

Asio gehört zu den schnellsten asynchronen C++-Bibliotheken. Es skaliert auf viele gleichzeitige Verbindungen in einem einzelnen Thread und unterstützt io_contexts mit mehreren Threads.

Wann verwenden

Verwenden Sie Asio für:

  • Hochleistungsfähige Netzwerkserver
  • Plattformübergreifendes asynchrones I/O
  • Asynchronen Code auf Basis von Koroutinen
  • Alles, was Zehntausende von Verbindungen erfordert

Kurztest

Welches zentrale Objekt in Boost.Asio steuert die Ereignisverarbeitung?

Zusammenfassung

Boost.Asio stellt plattformübergreifendes asynchrones I/O bereit. Der io_context steuert die Ereignisschleife. Verwenden Sie Callbacks im traditionellen Stil oder Koroutinen für asynchronen Code, der wie synchroner Code aussieht. Standalone Asio funktioniert ohne Boost.

Häufig gestellte Fragen

Ist die Lektion „Modernes asynchrones I/O mit Boost Asio“ kostenlos?

Ja — der vollständige Text von „Modernes asynchrones I/O mit Boost Asio“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Modernes asynchrones I/O mit Boost Asio“?

Verwenden Sie Boost.Asio für portables, modernes asynchrones I/O. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Modernes asynchrones I/O mit Boost Asio“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. BSD-Sockets-API in C++
  2. Einen TCP-Echo-Server erstellen
  3. Asynchrones I/O mit epoll und kqueue
  4. Modernes asynchrones I/O mit Boost Asio
← Zurück zu C++ Academy