IIS WebSocket Ping pong 非空闲时发送

Posted

技术标签:

【中文标题】IIS WebSocket Ping pong 非空闲时发送【英文标题】:IIS WebSocket Ping pong send when not idle 【发布时间】:2017-03-16 15:21:07 【问题描述】:

背景: 我正在学习使用 ASP.Net 的 websockets。我有一个应用程序,我在其中使用心跳来确保客户端仍处于连接状态。在我的应用程序中,我会每隔几秒发送一次心跳。在阅读过程中,我发现我可以使用乒乓球来实现类似的目标。因此,经过一番调查,我发现我可以将 ping 配置为 IIS 的一部分。在我的测试过程中,我注意到只有在连接空闲时才会发送 ping,而不是像我的心跳一样每隔几秒钟发送一次。

问题: 有没有办法让 IIS 每隔几秒发送一次,而不是仅在连接空闲时发送?还是我唯一的选择是实现自定义 ping/pong 逻辑?

【问题讨论】:

【参考方案1】:

不,没有办法改变它。配置仅限https://www.iis.net/configreference/system.webserver/websocket

原因是,当确定连接没有空闲时,发送 PING 帧是没有用的,因为 System.Net.WebSockets API 无论如何都不允许您访问 PING/PONG。我认为这是错误的,因为您也应该能够使用 PING 来计算连接延迟(因为 PONG 会回显 PING 发送的任何内容,您可以使用时间戳),但事实就是如此。

所以是的,在应用程序级别实现您自己的 PING/PONG 是您唯一的选择。

【讨论】:

以上是关于IIS WebSocket Ping pong 非空闲时发送的主要内容,如果未能解决你的问题,请参考以下文章

(websocket)协议中Ping Pong,Socket通讯ping pong(长连接),心跳包

可靠的 WebSocket 连接状态检测

使用 Java EE Websocket API 接收 ping

为啥火币服务器收不到 C# WebSocket Ping?

UVA - 1428 Ping pong

2-websocket 模式下的 Websocket 挂起