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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52