C++ – websocket++库的可使用的所有事件总结
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事件。
参考链接
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ – websocket++库的可使用的所有事件总结
原文链接:https://www.stubbornhuang.com/2513/
发布于:2023年02月14日 14:19:52
修改于:2023年06月21日 17:10:14
当前分类随机文章推荐
- C++ - 基于no-boost Asio实现一个异步TCP服务器 阅读140次,点赞0次
- GCC - -fpic、-fPIC、-fpie、-fPIE编译选项的作用和区别 阅读241次,点赞0次
- CMake - 设置Debug或者Release编译模式 阅读4012次,点赞0次
- C++ - 将Unicode std::wstring字符串转换为Unicode std::string转义字符,类似于\uxxxx的形式 阅读1932次,点赞0次
- C++ - std::vector初始化方式总结 阅读109次,点赞0次
- C++ - 根据给定分隔符分割字符串 阅读261次,点赞0次
- C++ - 常用的C++命令行参数解析第三方库 阅读4281次,点赞3次
- C++ - 数组初始化 阅读568次,点赞0次
- C++ - 速通nlohmann json,nlohmann json使用教程 阅读166次,点赞0次
- C++ - queue存储动态指针时正确释放内存 阅读6201次,点赞2次
全站随机文章推荐
- 资源分享 - Matrix Transforms for Computer Games and Animation 英文PDF下载 阅读954次,点赞0次
- C++ - 函数返回多个返回值的方法总结 阅读2624次,点赞0次
- C++ - 动态链接库dll为什么要使用unsigned char作为byte的内部格式 阅读997次,点赞0次
- Python - 类对象/列表/元祖/字典判空的方法 阅读2582次,点赞0次
- Pytorch - torch.cat参数详解与使用 阅读2178次,点赞1次
- OpenCV - 打开摄像头并对摄像头获取的每一帧图像进行Canny算子边缘化提取操作 阅读4376次,点赞1次
- C++ - Windows下实现程序开机自启动功能或者关闭开机自启动 阅读10次,点赞0次
- 资源分享 - 光线跟踪算法技术 Ray Tracing form the Ground Up中文版PDF下载 阅读1561次,点赞0次
- 资源分享 - Essential Mathematics for Games and Interactive Applications(Second Edition) 英文高清PDF下载 阅读2218次,点赞0次
- 深度学习 - 语音识别框架wenet源码wenet/utils/mask.py中的mask机制 阅读1236次,点赞1次
评论
169