边缘浏览器Websocket连接将在空闲时间后自动关闭



我在新的Window Edge浏览器上做了一个关于Websocket的测试。

似乎Edge浏览器上的websocket连接将在空闲时间后自动关闭(没有数据传输b/w 2端点)。这个问题在chrome或firefox上不会发生。

我只是想知道:在Edge浏览器上初始化websocket连接时,是否有任何额外的配置来保持连接打开?

我真的不想实现心跳机制,因为实际上所有东西在其他浏览器上仍然运行良好。

这可能不是你想要的答案,但是…

大多数websocket应用的生产环境运行在websocket代理(Apache, Nginx等)之后,通常也作为负载均衡器。

这些服务器还将实现避免half closed套接字所需的"超时"机制(当只有一方关闭连接并且没有数据传输时,不会引发错误并且文件句柄可以无限期地打开)。

例如,Heroku强制一个55秒的超时窗口。

这意味着你可能应该设置心跳-即使你的开发应用程序没有经历关闭。

如果你正在编写一个服务器端应用程序,并且可以控制websocket,你应该设置ping帧,它不会引发onmessage事件(ping和pong帧有不同的op code,并且不是常规消息序列的一部分)。

一些websocket框架(比如Ruby上的Plezi)会自动将ping设置为默认选项,但有些服务器/框架会让你自己决定。

总结:

对于生产环境,这些断开将是期望的行为(甚至是必需的行为)。虽然这也很可能是MS Edge的问题,但你可能必须在这两种情况下实现心跳。

注:

Websocket标准规定:

服务器可以随时关闭WebSocket连接。客户端不应该任意关闭WebSocket连接。

服务器(以及Websocket代理和负载平衡器)使用这个来建立它们的超时。重新连接是客户端的责任。

MS Edge真的不应该使用超时,因为这不是根据标准的预期行为…尽管Edge这样做可能是为了确保连接仍然打开(通过强制脚本重新连接,作为对服务器任意断开连接的反应)。

最新更新