Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan Websocket menggunakan C++?

Bagaimana untuk melaksanakan Websocket menggunakan C++?

WBOY
WBOYasal
2024-05-31 17:53:02774semak imbas

Langkah-langkah untuk melaksanakan Websocket dalam C++ adalah seperti berikut: Cipta pelayan: Gunakan perpustakaan Boost Asio untuk mencipta pelayan dan nyatakan nombor port. Mengendalikan sambungan klien: Gunakan perpustakaan WebSocket++ untuk mengendalikan sambungan klien dan melakukan jabat tangan protokol Websocket. Buat klien: Gunakan perpustakaan Autobahn untuk mencipta klien dan nyatakan alamat pelayan.

Bagaimana untuk melaksanakan Websocket menggunakan C++?

Melaksanakan Websocket menggunakan C++

Websocket ialah protokol yang membolehkan pelanggan dan pelayan bertukar data dalam masa nyata melalui saluran komunikasi dupleks penuh. Ia digunakan secara meluas dalam senario seperti pemesejan segera, permainan berbilang pemain dan media penstriman. Artikel ini akan membimbing anda dalam melaksanakan Websockets menggunakan C++.

Buat Pelayan

  1. Pertama, kita perlu buat pelayan. Contoh kod berikut menggunakan perpustakaan Boost Asio untuk mencipta pelayan Websocket mudah:
#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_;
};

Mengendalikan sambungan pelanggan

  1. Semasa mengendalikan sambungan pelanggan, kita perlu melakukan jabat tangan protokol Websocket. Contoh kod berikut menggunakan perpustakaan WebSocket++ untuk mengendalikan jabat tangan:
#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();
}

Mencipta Pelanggan

  1. Seterusnya, kita perlu mencipta pelanggan. Contoh kod berikut menggunakan pustaka Autobahn untuk mencipta klien Websocket mudah:
#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;
}

Kes praktikal

  1. Berikut ialah kes praktikal lengkap yang menunjukkan pelaksanaan pelayan dan pelanggan Websocket mudah:
// 服务端
#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;
}

kes praktikal menunjukkan cara menggunakan Boost Asio dan WebSocket++ untuk mencipta dan mengurus pelayan dan klien Websocket.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan Websocket menggunakan C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn