websocketpp中心跳函数使用记录

依赖的开源库:WebSocket++ | Zaphoyd Studios

server发送ping

client响应pong

问题: 通过set_ping_handler注册on_ping 函数后,发送一次心跳,却收到两次pong;

分析: 抓包分析客户端确实发送了两次包;

解决:    1、服务端: on_ping()函数中不能添加endpont_.ping()代码,且发送心跳时不能直接调用on_ping()函数,应该确定好目标ws连接后直接调用endpont_.ping(); 后者会自动关联到前面注册的on_ping()函数上;

    2、客户端: 收到ping后发送pong(1次),本地在on_ping函数中调用endpoint.pong(msg)(2次);

 

如下抓包结果,可以确定一次ping对应一次pong: 

 

 扩展: 

   对于client注册的on_pong函数,如果不主动调用就会发现注册没有意义,所以注册后,可使用endpoint.pong()来调用注册的on_pong()函数,这个时候你会发现 [FIN][MASKED]中 有两个websocket了;

 

posted @ 2023-02-28 19:48  uagvdu  阅读(300)  评论(0编辑  收藏  举报