WebSocket
是一种在单个 TCP 连接上进行全双工通信的协议,它使得客户端和服务器之间的数据交流变得更加实时、高效。相比传统的 HTTP 请求-响应机制,WebSocket 直接建立连接,并通过数据帧(Data Frame
)来交换消息,从而避免了每次通信都要建立、断开连接的开销。
WebSocket 协议最早由 HTML5 规范提出,它可以用于 Web 应用程序、移动应用程序等不同类型的应用场景中。WebSocket 除了支持文本格式的消息外,还可以使用二进制数据格式发送数据,这使得 WebSocket 可以处理包括音频、视频等复杂类型的数据。
WebSocket++
是一个C++编写的开源库,用于在Web应用程序中实现WebSocket协议的客户端和服务器端。
以下是WebSocket++的主要特点和功能:
以ubuntu18.04为例:
websocketpp库依赖boost_system
,因此首先安装boost库:
# apt安装
sudo apt-get install libboost-dev
安装websocketpp库(这里用0.8.2版本):
github地址:https://github.com/zaphoyd/websocketpp
# 编译安装
cd websocketcpp
mkdir build && cd build
cmake ..
make
sudo make install
安装完成:
通信例程测试:
# 服务端
cd websocketpp/examples/echo_server
g++ echo_server.cpp -o echo_server -lboost_system -lpthread
./echo_server
# 客户端
cd websocketpp/examples/echo_client
g++ echo_client.cpp -o echo_client -lboost_system -lpthread
./echo_client
# 默认通信在本地的9002端口
在线websocket收发测试:
测试地址:http://www.websocket-test.com/
测试如下:
端口重用问题可以看:http://t.csdn.cn/Z7AyU
(一般关掉服务后直接重启会报错,等一会就可以)
根本解决就是在listen函数前加入这条,这样在Linux端重启程序后就不会报错了:
server.set_reuse_addr(true); // 加入端口复用
server.listen(websocketpp::lib::asio::ip::tcp::v4(), uPort);
参考:
https://zhuanlan.zhihu.com/p/59925926
http://t.csdn.cn/CGAFL