如何解决野外vs开发机中的websocket
在我的开发环境和实际部署之间,我的websocket ping / pong经历了不同的行为。
当我开始这个项目时,我花了一些时间测试websocket的ping / pong功能,以将keepalive / connection检查委托给websocket堆栈。我的主要目标是了解远程客户端是否尽快断开连接。因此,我添加了一个服务器端websocket keepalive(例如20秒)。
在我的开发机上,我遇到了类似的事情:
[device] <==> [switch] <==> [asp.net core app(kestrel)]
在那种情况下,一切都很好:当我断开websocket客户端设备的连接后,经过20秒(好的,有时还多了一点),我收到一条通知,通知您连接已丢失。
在我的暂存环境中,这有点复杂:
[device] <==> [switch] <==> [internet] <==> [IIS reverse proxy] <==> [asp.net core app(kestrel)]
在这种情况下,这很奇怪:当我断开websocket客户端设备的连接时,我仍然会从IIS中获取PONG ...
我确实用wireshark拍摄了照片以确认这一点。 所以我的问题是/是:谁代表客户端发送PONG?是反向代理(在我的情况下是IIS)吗?那是正常的吗?如何避免这种情况? IIS配置中有问题吗?
编辑:我只是在Linux服务器上使用nginx而不是IIS测试了它,并且得到了相同的行为。所以我一定错过了一些东西!
解决方法
我们似乎不能依靠websocket ping / pong来保证正确的行检查,例如they (ping) may not be sent到客户端。根据基础架构,它们may be intercepted by a proxy或链中的其他链接。
Ping/pong becomes unrelevant用于在这种配置下进行连接检查。
RFC is not more constraining令人失望!
此外,asp.net core's websocket documentation中有一些有关如何进行正确的连接检查的指示。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。