如何捕获SSE事件源确认

问题描述 投票:1回答:3

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

https://nodejs.org/api/http.html#http_response_write_chunk_encoding_callback

节点服务器

    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,有什么方法可以接收确认吗?

javascript node.js server-sent-events eventsource
3个回答
1
投票

SSE是一对多Push协议。因此,没有任何确认。您可以在收到回执后再发送一个AJAX请求,但是该模式中没有提供此功能的东西。


0
投票

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

客户端无法确认事件接收。

如果必须承认,则可能需要像websockets这样的双向通信。


0
投票

我知道这已经有很多年了,但是没有一个答案是正确的。 1)TCP确实确实对推送流进行了ACK-它的标准http! (尽管您的代码是否处于足够低的水平以检测到它是另外一个故事)

2)开发自己的ACK系统并不困难(我已经做到了!-当最后一个客户端消失时释放资源),是的,它倾向于违背协议的“精神”并复制到一个学位websocket范式...但是说它不可能是错误的。在第一个消息中发送一个唯一的按客户端的“令牌”,浏览器将保存该消息并启动一个js“ ping”计时器,该计时器可阻止“仍然存在”的消息。在您的erver代码中,处理ajax并重新启动client-stil-alive计时器。如果到期,则客户端已消失,清理/释放资源等。

是的,它有点“笨拙”,但它可以工作,而不是火箭科学上的困难。

只是我(很晚)获得2分钱

所附图像是我正在诊断一种情况,其中缺少ACK,但是除了指示的一个以外,您可以看到ACKenter image description here

© www.soinside.com 2019 - 2024. All rights reserved.