Cpp(十) WebSocket使用

websocket for C++

#1 环境

C++11
boost 1.58.0
Ubuntu 16.04
cmake 3.18.2 
websocketpp

#1 websocketpp 安装

websocketpp 依赖boost,需要先将boost装好

  1. 下载
git clone https://github.com/zaphoyd/websocketpp.git
  1. 编译安装
cd websocketpp
mkdir build
cd build
cmake ..
make 
sudo make install

安装路径 : /usr/local/include/websocketpp

#2 使用

main.cpp

#include <iostream>
#include <websocketpp/config/asio_no_tls.hpp>
#include <websocketpp/server.hpp>
#include <websocketpp/config/asio_no_tls_client.hpp>
#include <websocketpp/client.hpp>
#include <functional>

typedef websocketpp::server<websocketpp::config::asio> io_server;
typedef websocketpp::client<websocketpp::config::asio_client> io_client;



class WebSocketServer {

public:
    WebSocketServer() {
        server.set_error_channels(websocketpp::log::elevel::all); // log
        server.set_access_channels(websocketpp::log::alevel::all ^ websocketpp::log::alevel::frame_payload);
        server.init_asio(); // asio init
        server.set_message_handler(std::bind( // set on_message
                &WebSocketServer::on_message, this,
                std::placeholders::_1, std::placeholders::_2
        ));
        server.set_open_handler(std::bind( // set on_open
                &WebSocketServer::on_open, this, std::placeholders::_1)
        );
        server.set_close_handler(std::bind( // set on_close
                &WebSocketServer::on_close, this, std::placeholders::_1)
        );
        server.set_fail_handler(std::bind( // set on_fail
                &WebSocketServer::on_fail, this, std::placeholders::_1)
        );

    }

    void on_message(websocketpp::connection_hdl hdl, io_server::message_ptr msg) {
        std::cout << "on_message" << std::endl;
        server.send(hdl, msg->get_payload(), msg->get_opcode()); // 发送消息
    }

    void on_open(websocketpp::connection_hdl hdl) {
        std::cout << "on_open" << std::endl;
    }

    void on_close(websocketpp::connection_hdl hdl) {
        std::cout << "on_close" << std::endl;
    }

    void on_fail(websocketpp::connection_hdl hdl) {
        std::cout << "on_fail" << std::endl;
    }


    void run() {
        server.listen(8888); // 端口 9002
        server.start_accept();
        server.run();
    }

public:
    io_server server;
    io_client client;
};

int main() {
    WebSocketServer app;
    app.run();
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.17)
project(wsppdemo)

set(CMAKE_CXX_STANDARD 14)

set(BOOST_ROOT "/usr/local/include/boost")
set(BOOSTROOT "/usr/local/include/boost")
include_directories(/usr/local/include)
link_directories(/usr/local/lib)

FIND_PACKAGE(Threads REQUIRED)
SET(Boost_USE_MULTITHREADED ON)

find_package(Boost REQUIRED COMPONENTS system)

add_executable(wsppdemo main.cpp)

target_link_libraries(wsppdemo boost_thread boost_system ${CMAKE_THREAD_LIBS_INIT})

在这里插入图片描述

Thrift WebSocket使用C++语言编写的一种实现Thrift协议的通信方式。Thrift是一种跨语言的高性能、可扩展的服务框架,可以用于构建可靠的客户端和服务端之间的通信。 Thrift WebSocket使用WebSocket协议作为底层通信协议,WebSocket是一种基于TCP的全双工通信协议,可以在客户端与服务端之间进行实时的数据交互。Thrift将其封装成了一种适用于C++的库,可以通过Thrift WebSocketC++中实现跨语言的通信。 通过Thrift WebSocket,我们可以在C++中创建一个Thrift客户端或服务端,并且将其与其他不同语言的客户端或服务端进行连接。Thrift通信是基于IDL(Interface Definition Language)进行的,通过定义接口、结构体和方法等来进行通信。Thrift会根据IDL文件生成对应的代码,然后我们可以在代码中调用这些生成的接口来进行通信。 使用Thrift WebSocket,我们可以实现高性能的、可扩展的跨语言通信。与传统的RPC(Remote Procedure Call)相比,Thrift在序列化和反序列化上采用了自定义的二进制协议,可以提高通信的效率。同时,由于Thrift支持多种编程语言,我们可以在C++使用Thrift WebSocket与其他语言的客户端或服务端进行互操作。 总而言之,Thrift WebSocket是一种使用C++语言实现的Thrift协议通信方式,可以在C++中实现与不同语言的客户端和服务端之间的跨语言通信。它使用WebSocket作为底层通信协议,同时依托于Thrift的高性能和可扩展性,可以提供高效、可靠的通信解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值