Javascript 如何捕获SSE事件源确认

Javascript 如何捕获SSE事件源确认,javascript,node.js,server-sent-events,eventsource,Javascript,Node.js,Server Sent Events,Eventsource,我正在使用此代码向浏览器客户端发送SSE消息 节点服务器 response.writeHead(200, { 'Content-Type': 'text/event-stream', 'Access-Control-Allow-Origin': '*' }); response.write(message); response.end(); 对于客户端,我使用以下javascript: var source = new EventSource('myurl'); s

我正在使用此代码向浏览器客户端发送SSE消息

节点服务器

    response.writeHead(200, {  'Content-Type': 'text/event-stream', 'Access-Control-Allow-Origin': '*' });
    response.write(message);
    response.end();
对于客户端,我使用以下javascript:

var source = new EventSource('myurl');
source.addEventListener('add', addHandler, false);
source.addEventListener('remove', removeHandler, false);

一切正常,但服务器如何确定客户端确实收到了它?我猜SSE正在使用TCP,有没有办法接收到确认信息?

SSE是一对多推送协议。所以没有人承认。您可以在收到AJAX请求后将其发送回,但模式中没有提供此功能的任何内容

SSE是一种单向通信协议,用于将数据从服务器推送到客户端

客户端无法确认事件接收


如果确认是必须的,你可能需要像WebSocket一样的双向沟通。

我知道这已经有很多年了,但没有一个答案是正确的。1) TCP确实确认推送流——它的标准http!(尽管您的代码是否处于足够低的级别以检测它是另一回事)

2) 开发自己的ACK系统并不困难(我已经做到了!-在最后一个客户端消失时释放资源),是的,它倾向于违背协议的“精神”,并在一定程度上复制websocket范例……但说它不可能是错误的。在浏览器保存的第一条消息中为每个客户端发送一个唯一的“令牌”,并启动一个js“ping”计时器,该计时器显示一条“仍然活动”消息。在服务器代码中,处理ajax并重新启动客户端stil-alive计时器。如果到期,则表示客户端已离开,清理/释放资源等

是的,它有点“笨重”,但它是有效的,它不是火箭科学的困难

只是我的(很晚)2c值

所附的图像是我诊断的一个案例,其中确认缺失,但每隔一个,除了指示的一个,您可以看到确认