我正在使用
websocketpp
运行 websocket 服务器。出于应用原因,服务器可能会关闭连接。当我使用 websocat
连接到服务器并且服务器关闭连接时,关闭握手似乎超时,并且调用 on_close
处理程序。
你知道
websocat
是否正确处理结束握手吗? (如果没有那就奇怪了)
注意:我没有使用另一个 websocket 客户端进行测试。
关闭连接时我做错了什么吗?
为什么关闭握手超时时会调用
on_close
处理程序?
服务器代码:
#include <thread>
#include <websocketpp/config/asio.hpp>
#include <websocketpp/server.hpp>
#include <iostream>
typedef websocketpp::server<websocketpp::config::asio> server;
using websocketpp::lib::placeholders::_1;
void on_open_connection(server * srv, websocketpp::connection_hdl hdl) {
using namespace std::chrono_literals;
using namespace websocketpp::close::status;
std::this_thread::sleep_for(3s);
auto conn = srv->get_con_from_hdl(hdl);
conn->close(normal, get_string(normal));
}
void on_close(websocketpp::connection_hdl hdl) {
std::cout << "On close" << std::endl;
}
int main() {
server closing_server;
closing_server.init_asio();
closing_server.set_open_handler(std::bind(&on_open_connection, &closing_server, ::_1));
closing_server.set_close_handler(std::bind(&on_close, ::_1));
closing_server.listen(9002);
closing_server.start_accept();
closing_server.run();
}
不,websocat 目前无法正确执行关闭握手。它不会回复收到的关闭帧。我为此打开了一个问题:https://github.com/vi/websocat/issues/269