首頁  >  文章  >  後端開發  >  如何使用C++實作Websocket?

如何使用C++實作Websocket?

WBOY
WBOY原創
2024-05-31 17:53:02750瀏覽

C++ 實作 Websocket 的步驟如下:建立伺服器:使用 Boost Asio 程式庫建立伺服器,並指定連接埠號碼。處理客戶端連線:使用 WebSocket++ 程式庫處理客戶端連接,並進行 Websocket 協定握手。建立客戶端:使用 Autobahn 庫建立客戶端,並指定伺服器位址。

如何使用C++實作Websocket?

使用C++ 實作Websocket

#Websocket 是一種協議,允許客戶端和伺服器透過全雙工通訊通道進行即時數據交換。它廣泛應用於即時通訊、多人遊戲和串流媒體等場景。本文將指導您使用 C++ 實作 Websocket。

建立 Server

  1. 首先,我們需要建立一個伺服器。以下程式碼範例使用Boost Asio 函式庫來建立一個簡單的Websocket 伺服器:
#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_;
};

處理客戶端連線

    ##在處理客戶端連線時,我們需要進行Websocket 協定握手。以下程式碼範例使用 WebSocket++ 函式庫來處理握手:
  1. #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();
    }

建立 Client

    接下來,我們需要建立一個客戶端。以下程式碼範例使用Autobahn 函式庫來建立一個簡單的Websocket 用戶端:
  1. #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;
    }

實戰案例

    以下是一個完整的實戰案例,示範了一個簡單的Websocket 服務端和客戶端的實作:
  1. // 服务端
    #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;
    }
這個實戰案例示範如何使用Boost Asio 和WebSocket++ 來建立和管理一個Websocket 服務端和客戶端。

以上是如何使用C++實作Websocket?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn