C++ – websocket++库的可使用的所有事件总结
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ – websocket++库的可使用的所有事件总结
原文链接:https://www.stubbornhuang.com/2513/
发布于:2023年02月14日 14:19:52
修改于:2023年02月14日 14:19:52

1 Websocket++库的事件
C++的websocket库Websocket++中使用事件机制管理websocket连接消息,比如在websocket连接打开时触发open消息,在接收到客户端/服务端时,触发message消息,就和在js、java中使用websocket一样。
在Websocket++中有两种事件可以设置,一种是Connection Handlers,另一种是Message Handlers。Connection Handlers在每一个websocket连接过程中最多调用一次,主要是websocket连接初始化、错误还有关闭事件;而Message Handlers则是响应消息传入以及与消息相关的事件,只会在websocket连接处于打开状态时被调用。
1.1 Connection Handlers 连接事件
websocket在连接时会按照顺序触发以下事件,每个事件在每个websocket连接最多被调用一次,事件触发的顺序如下:
- Socket Init Handler
- TCP Pre-init Handler
- TCP Post-init Handler
- Validate Handler
- Open Connection Handler
- Fail Connection Handler
- Close Connection Handler
1.1.1 Socket Init Handler
套接字初始化事件,该钩子在套接字初始化之后但是在套接字初始化之前触发,事件函数形式为
socket_init(connection_hdl, asio::ip::tcp::socket&)
可允许在发送/接收连接之前设置任意套接字选项。
1.1.2 TCP Pre-init Handler
该钩子在TCP连接建立之后,websocket握手之前触发,事件函数形式为
tcp_pre_init(connection_hdl)
1.1.3 TCP Post-init Handler
该钩子在TLS握手之前触发,以请求要使用的TLS上下文。
必须返回已配置的TLS的context的指针才能继续,可以在context中设置TLS设置、证书等。
事件函数形式为
tls_context_ptr tls_init(connection_hdl)
1.1.4 Validate Handler
在处理请求之后但在发送响应之前,在打开握手期间为服务器触发此钩子。
它为程序提供了检查标头和其他连接详细信息并接受或拒绝连接的机会。验证发生在打开或失败处理程序之前,返回 true 接受连接,false 拒绝。如果没有注册验证处理程序,所有连接都将被接受。
事件函数形式为
bool validate(connection_hdl)
1.1.5 Open Connection Handler
该钩子在websocket连接打开成功时触发,事件函数形式为
open(connection_hdl)
1.1.6 Fail Connection Handler
该钩子在websocket连接失败时触发,事件函数形式为
fail(connection_hdl)
如果连接失败,将不会触发连接关闭的事件。
1.1.7 Close Connection Handler
该钩子在websocket连接关闭时触发,事件函数形式为
close(connection_hdl)
每一个打开的websocket连接都将调用一次关闭。
1.2 Message Handlers 消息事件
Message Handlers包括以下事件
- Message Handler
- Ping Handler
- Pong Handler
- Pong Timeout Handler
- Http Handler
- Interrupt Handler
1.2.1 Message Handler
接收到文本或者二进制消息时触发,事件函数形式为
message(connection_hdl, message_ptr)
其中message_ptr
及其API取决于连接的端点类型及其配置。
1.2.2 Ping Handler
接收到ping消息时触发,事件函数形式为
bool ping(connection_hdl, std::string)
其中第二个参数std::string
为ping附加的信息。这个事件处理函数的返回值将决定是否用pong相应ping消息,如果没有设置ping事件处理函数,那么websocket++将默认使用ping相同的消息内容的pong进行响应。
1.2.3 Pong Handler
接收到pong消息时触发,事件函数形式为
pong(connection_hdl, std::string)
其中第二个参数std::string
为pong附加的信息。
1.2.4 Pong Timeout Handler
如果在配置的时间内没有对ping消息进行响应,则触发该钩子,事件函数形式为
pong_timeout(connection_hdl, std::string)
其中第二个参数std::string
为未应答的ping的附加信息。
1.2.5 Http Handler
当收到的不是websocket请求,而是未升级的http请求时触发,事件函数形式为
http(connection_hdl)
websocket++允许响应常规Http请求,但是如果没有注册相应的处理程序,则返回426 Upgrade Required错误。
1.2.6 Interrupt Handler
当websocket连接被手动中断时触发,事件函数形式为
interrupt(connection_hdl)
使用endpoint::interrupt
可以中断websocket连接,并且触发interrupt事件。
参考链接
当前分类随机文章推荐
- C++ - 对字符串和图片进行base64编解码 阅读131次,点赞0次
- C++ - 函数返回多个返回值的方法总结 阅读1693次,点赞0次
- C++ - 使用Crypto++/CryptoPP加解密库对字符串或者文件进行AES256加密 阅读2981次,点赞1次
- C++STL容器 - std::vector构造方式与分配值方式总结 阅读691次,点赞0次
- C++ - 字节数组byte[]或者unsigned char[]与double的相互转换 阅读2013次,点赞0次
- C++读取Shp文件并将Shp转化为DXF 阅读3043次,点赞1次
- C++11 - std::bind简要介绍以及可绑定函数的几种形式总结 阅读4493次,点赞4次
- C++ – 字节数组byte[]或者unsigned char[]与long long的相互转换 阅读1467次,点赞0次
- C++11 - std::string - stod/stof/stoi/stol/stold/stoll/stoul/stoull,由std::string转换为int/long/float/double等其他类型 阅读3252次,点赞0次
- C++ - 获取std::vector中的最小值、最大值以及对应的索引 阅读38次,点赞0次
全站随机文章推荐
- 资源分享 - Cloth Modeling and Animation 英文高清PDF下载 阅读1023次,点赞0次
- 资源分享 - Computer Animation - Algorithms and Techniques (Third Edition) 英文高清PDF下载 阅读2212次,点赞1次
- 深度学习 - 在大数据集下,内存容量与磁盘IO速度影响模型训练速度的问题 阅读43次,点赞0次
- 工具API推荐 - 通过QQ号获取QQ头像 阅读1190次,点赞0次
- 资源分享 - 8i Voxelized Full Bodies – A Voxelized Point Cloud Dataset下载 阅读2527次,点赞0次
- Python3爬虫 - requests库的requests.exceptions所有异常详细说明 阅读5406次,点赞2次
- 资源下载 - 地球编年史1-7本高清带书签PDF下载 阅读14499次,点赞21次
- 资源分享 - Essential Mathematics for Games and Interactive Applications(First Edition) 英文高清PDF下载 阅读1753次,点赞0次
- Duilib - 界面出现不可拖动和不可拉伸的问题 阅读128次,点赞0次
- 计算几何 - 求解两个三维向量之间的三维旋转矩阵 阅读1148次,点赞0次
评论
167