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

时间:2015-08-18 08:09:07

标签: websocket microsoft-edge

我在新的Window Edge浏览器上测试了Websocket。

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

我只是想知道: 在Edge浏览器上初始化websocket连接以保持连接打开时是否有任何其他配置?

我真的不想实现心跳机制,因为实际上一切都在其他浏览器上运行良好。

1 个答案:

答案 0 :(得分:3)

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

websocket应用程序的大多数生产环境都在Websocket代理(Apache,Nginx等等)后面运行,它通常也充当负载均衡器。

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

例如,Heroku enforces a 55 second timeout window

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

如果您正在编写服务器端应用程序并控制websocket,则应该设置ping帧,这样不会导致onmessage事件被引发(ping和pong)帧具有不同的op code并且不是常规消息序列的一部分。)

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

总结:

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

<强> P.S。

Websocket标准规定:

  

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

服务器(以及Websocket代理和负载均衡器)使用它来建立超时。 客户有责任重新连接

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

相关问题