是否可以设置 EventSource 的 Last-Event-Id 标头?我有一个简单的聊天应用程序,可以缓存消息。当我连接时,我会发送自 Last-Event-Id 以来的所有聊天,如果未提供,则发送所有聊天。
由于我保留了这些消息,我认为我可以将 Id 传递给 EventSource 构造函数,以避免它返回我已经拥有的所有消息。这根本不可能吗?
是否可以设置 EventSource 的 Last-Event-Id 标头?我有一个简单的聊天应用程序,可以缓存消息。当我连接时,我会发送自 Last-Event-Id 以来的所有聊天,如果未提供,则发送所有聊天。
由于我保留了这些消息,我认为我可以将 Id 传递给 EventSource 构造函数,以避免它返回我已经拥有的所有消息。这根本不可能吗?
您可以传递有关查询字符串的信息。
var source = EventSource("source?eventId=12345");
最终,您可以在服务器端理解它并返回正确的事件。
Last-Event-Id
如果连接中断并且客户端必须重新连接,则EventSource 请求将仅具有标头。您可以通过让服务器断开第一个连接来“强制”重新连接。
它是这样的:
Last-Event-Id
是请求标头。
Last-Event-Id
存在:
Last-Event-Id
不存在:
Last-Event-Id
标头,现在您跳到第 2 个。这种方法的唯一问题是客户端造成的延迟,因为它必须建立两个连接。我没有测试延迟,但看起来每个请求之间大约有 3-5 秒。