1 回答
TA贡献1871条经验 获得超13个赞
SSE 标准要求浏览器在 N 秒后自动重新连接,如果连接丢失或服务器故意关闭套接字。(N 在 Firefox 中默认为 5,在 Chrome 和 Safari 中默认为 3,我上次检查过。)所以,如果这是可取的,您不需要做任何事情。(在 WebSockets 中,您必须自己实现这种重新连接。)
如果那样的重新连接的是不理想的,则应该将消息发送回客户端,称“节目一结束,走开”。例如,如果您正在流式传输财务数据,您可能会在周五晚上市场关闭时发送该数据。然后,客户端应该拦截此消息并从其一侧关闭连接。(然后套接字将消失,因此服务器进程将自动关闭。)
在 JavaScript 中,假设您使用 JSON 发送数据,它看起来像:
var es = EventSource("/datasource");
es.addEventListener("message", function(e){
var d = JSON.parse(e.data);
if(d.shutdownRequest){
es.close();
es=null;
//Tell user what just happened.
}
else{
//Normal processing here
}
},false);
更新:
您可以通过侦听“关闭”事件,然后查看重新连接的发生时间来了解 e.target.readyState
es.addEventListener("error", handleError, false);
function handleError(e){
if(e.target.readyState == 0)console.log("Reconnecting...");
if(e.target.readyState == 2)console.log("Giving up.");
}
没有其他信息可用,但更重要的是,它无法区分服务器进程故意关闭连接、Web 服务器崩溃或客户端的 Internet 连接中断。
您可以自定义的另一件事是重试时间,通过让服务器发送retry:NN消息。因此,如果您不想快速重新连接,而是希望在任何重新连接尝试之间至少间隔 60 秒,请执行此操作让您的服务器发送retry:60.
- 1 回答
- 0 关注
- 192 浏览
添加回答
举报