当前位置: 首页 > Web前端 > HTML5

WebSocket++环境搭建

时间:2023-04-05 00:30:20 HTML5

一、类库介绍WebSocket++只是一个头库,实现了RFC6455的WebSocket协议。它可用于编写基于C++语言的客户端应用程序和服务器端应用程序。该库依赖于Asio库,可以在boost中包含asio库,也可以包含独立的asio库。主要特性完全支持RFC6455部分支持Hixie76/Hybi00基于消息、基于事件的接口支持安全WebSockets(TLS)、IP6和显式代理灵活的依赖管理(C++11标准库或Boost)可移植、跨平台(Posix/Windows,32/64bit,Intel/ARM/PPC)二、类库下载WebSocket++下载地址https://github.com/zaphoyd/we...Boost1.69.0下载(与Asio任选其一)https://www.boost.org/users/h...Asio独立库(Boost任选其一)http://www.think-async.com3.编译工程个人觉得没必要编译整个项目。编译项目主要是为了展示项目的完整性。如果你只是专注于搭建自己的开发环境,可以跳过本章,直接参考“创建自定义项目”。3.1准备编译环境#安装工程构建工具和C++编译器$sudoaptinstallcmakesconsg++-y#安装openssl开发库$sudoaptinstalllibssl-dev#编译boost库$./bootstrap.sh$./b23.2方法一:通过cmake编译#导出环境变量(boost路径根据自己情况设置)$exportBOOST_ROOT="/home/sprite/Library/boost_1_69_0"#通过cmake编译所有工程(位于主目录下)ofWebSocketpp)$mkdirbuild&&cdbuild$cmake-DBUILD_EXAMPLES=ON-DBUILD_TESTS=ON..$make3.3方法二:通过scons编译#导出环境变量(boost路径根据自己情况设置)$exportBOOST_ROOT="/home/sprite/Library/boost_1_69_0"#通过scons编译所有项目(位于WebSocketpp主目录下)$scons3.4编译说明项目支持两种构建方式,cmake和scons,任选其一。无论是基于cmake还是scons,都是基于Boost库,需要通过BOOST_ROOT环境变量指定Boost库路径。项目中的examples、test、tutorials子项目不能单独编译,因为项目的构建体系是按照整体构建来设计的。创建自己的项目时,可以直接使用独立的asio库,不依赖boost库,也不需要指定BOOST_ROOT环境变量。4.创建自定义项目。CMake的项目组织和构建方法这里不再赘述。请参考我之前的CMake系列文章。本示例工程只有两个文件(CMakeLists.txt、server.cpp),实现了最简单的服务端信息回显功能。开发者可以通过http://www.websocket-test.com/网站填写自己主机服务器的URI进行测试。4.1项目文件CMakeLists.txt#需要cmake的最低版本cmake_minimum_required(VERSION3.1)#项目名称project(server)#启用C++11add_definitions(-std=c++11)#使用独立的Asioadd_definitions(-DASIO_STANDALONE)#Asio库根目录set(ASIO_ROOT"/home/sprite/Library/asio_1.12.2")#WebSocket++头文件目录set(WEBSOCKET_INCLUDE"/home/sprite/websocket/websocketpp-master")#生成可执行程序add_executable(${PROJECT_NAME}server.cpp)#头文件搜索路径target_include_directories(${PROJECT_NAME}PUBLIC${ASIO_ROOT}/include${WEBSOCKET_INCLUDE})#链接库文件(安全连接需要链接sslcrypto)target_link_libraries(${PROJECT_NAME}pthread)server.cpp#include#include#includetypedefwebsocketpp::server服务器;classutility_server{public:utility_server(){//设置日志记录设置m_endpoint.set_error_channels(websocketpp::log::elevel::all);m_endpoint.set_access_channels(websocketpp::log::alevel::all^websocketpp::log::alevel::frame_payload);//初始化Asiom_endpoint.init_asio();//将默认消息处理程序设置为回显处理程序m_endpoint.set_message_handler(std::bind(&utility_server::echo_handler,this,std::placeholders::_1,std::placeholders::_2));}voidecho_handler(websocketpp::connection_hdlhdl,server::message_ptrmsg){//写一条新消息m_endpoint.send(hdl,msg->get_payload(),msg->get_opcode());}voidrun(){//监听9002端口m_endpoint.listen(9002);//排队连接接受操作m_endpoint.start_accept();//启动Asioio_service运行循环m_endpoint.run();}private:serverm_endpoint;};intmain(){utility_servers;运行();return0;}4.2编译运行编译$mkdirbuild$cdbuild$cmake..$make运行./server4.3运行效率页面修改URI#浏览器访问页面http://www.websocket-test.com/#在连接前的文本框中,输入你的服务器程序所在主机的ip地址ws://192.168.88.128:9002#点击“断开连接”按钮,再点击“连接”"按钮发送文本"输入内容点击"发送(ctrl+Enter)"按钮发送数据。运行效果图5.参考链接WebSocket++代码下载WebSocket++用户手册WebSocket++官网Boost1.69.0AsioStandalone