Maison  >  Article  >  développement back-end  >  Comment implémenter Websocket en C++ ?

Comment implémenter Websocket en C++ ?

WBOY
WBOYoriginal
2024-05-31 17:53:02682parcourir

Les étapes pour implémenter Websocket en C++ sont les suivantes : Créer un serveur : Utilisez la bibliothèque Boost Asio pour créer un serveur et spécifier le numéro de port. Gérer les connexions client : utilisez la bibliothèque WebSocket++ pour gérer les connexions client et effectuer des négociations de protocole Websocket. Créer un client : utilisez la bibliothèque Autobahn pour créer un client et spécifier l'adresse du serveur.

Comment implémenter Websocket en C++ ?

Implémentation de Websocket en C++

Websocket est un protocole qui permet aux clients et aux serveurs d'échanger des données en temps réel sur un canal de communication full-duplex. Il est largement utilisé dans des scénarios tels que la messagerie instantanée, les jeux multijoueurs et le streaming multimédia. Cet article vous guidera dans l'implémentation de Websockets en utilisant C++.

Créer un serveur

  1. Tout d'abord, nous devons créer un serveur. L'exemple de code suivant utilise la bibliothèque Boost Asio pour créer un serveur Websocket simple :
#include <boost/asio.hpp>

using boost::asio::ip::tcp;
using boost::asio::async_write;

class WebsocketServer {
public:
    WebsocketServer(boost::asio::io_service& io_service, int port) :
        acceptor_(io_service, tcp::endpoint(tcp::v4(), port)) {}

    void start() {
        accept();
    }

private:
    void accept() {
        acceptor_.async_accept([this](boost::system::error_code ec, tcp::socket socket) {
            if (!ec) {
                std::cout << "New client connected" << std::endl;
                handle_connection(std::move(socket));
            }
            accept();
        });
    }

    void handle_connection(tcp::socket socket) {
        ... // 处理客户端连接
    }

    tcp::acceptor acceptor_;
};

Gestion des connexions client

  1. Lors de la gestion des connexions client, nous devons effectuer une poignée de main du protocole Websocket. L'exemple de code suivant utilise la bibliothèque WebSocket++ pour gérer la poignée de main :
#include <websocketpp/server.hpp>

using websocketpp::connection_hdl;
using websocketpp::server;

typedef websocketpp::server<websocketpp::config::asio_tls> server_type;

void handle_connection(tcp::socket socket) {
    server_type server;
    connection_hdl connection = server.connect(std::move(socket));
    server.set_message_handler([connection](auto, auto, auto msg) {
        server.send(connection, msg, websocketpp::frame::opcode::text);
    });
    server.run();
}

Création d'un client

  1. Ensuite, nous devons créer un client. L'exemple de code suivant utilise la bibliothèque Autobahn pour créer un client Websocket simple :
#include <autobahn/autobahn.hpp>

using autobahn::wsuri;
using autobahn::websocketpp_websocket;

int main() {
    wsuri uri("ws://localhost:8080");
    websocketpp_websocket websocket;
    websocket.start(uri);
    websocket.send("Hello, world!");
    websocket.close();
    return 0;
}

Cas pratique

  1. Ce qui suit est un cas pratique complet qui démontre l'implémentation d'un simple serveur et client Websocket :
// 服务端
#include 
#include 
#include 

using boost::asio::ip::tcp;
using websocketpp::connection_hdl;
using websocketpp::server;
using websocketpp::config::asio_no_tls;

typedef server server_type;

int main() {
    boost::asio::io_service io_service;
    server_type server(io_service);

    server.set_open_handler([&server](connection_hdl hdl) {
        std::cout << "New client connected" << std::endl;
    });

    server.set_close_handler([&server](connection_hdl hdl) {
        std::cout << "Client disconnected" << std::endl;
    });

    server.set_message_handler([&server](auto, auto, auto message) {
        server.send(message->get_raw_payload(), message->get_raw_payload_size());
    });

    server.listen(8080);
    server.start_accept();
    io_service.run();
    return 0;
}

// 客户端
#include <autobahn/autobahn.hpp>

using autobahn::wsuri;
using autobahn::websocketpp_websocket;

int main() {
    wsuri uri("ws://localhost:8080");
    websocketpp_websocket websocket;
    websocket.start(uri);
    websocket.send("Hello, world!");
    websocket.close();
    return 0;
}

This Un cas pratique montre comment utiliser Boost Asio et WebSocket++ pour créer et gérer un serveur et un client Websocket.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn