我在新的Window Edge浏览器上测试了Websocket。
似乎Edge浏览器上的websocket连接将在空闲时间后自动关闭(没有数据传输b / w 2端点)。 chrome或firefox上不会出现此问题。
我只是想知道: 在Edge浏览器上初始化websocket连接以保持连接打开时是否有任何其他配置?
我真的不想实现心跳机制,因为实际上一切都在其他浏览器上运行良好。
答案 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可能会这样做以确保连接仍然是打开的(强制执行脚本重新连接作为对服务器的任意断开的反应。)