向EventSource构造函数提供上一个事件Id

Provide Last-Event-Id to EventSource constructor

本文关键字:上一个 事件 Id EventSource 构造函数      更新时间:2023-09-26

是否可以设置EventSource的Last Event Id标头?我有一个简单的聊天应用程序,可以缓存消息。当我连接时,我会发送自上次事件Id以来的所有聊天,如果没有提供,则发送所有聊天。

由于我保留了这些消息,我想我可以将Id传递给EventSource构造函数,以避免它返回我已经拥有的所有消息。这根本不可能吗?

您可以传递查询字符串的信息。

var source = EventSource("source?eventId=12345");

最终,您可以在服务器端理解它并返回正确的事件。

如果连接中断并且客户端必须重新连接,EventSource请求将仅具有Last-Event-Id标头。你可以"力";通过让服务器断开第一个连接来重新连接。

它是这样的:

  1. 使用EventSource创建连接
  2. 服务器接收该请求并测试Last-Event-Id是否是请求头。
    • 如果存在Last-Event-Id
      • 获取值/id
      • 根据id从服务器发送事件
    • 如果Last-Event-Id不存在:
      • 发送一个包含id(您认为是最后一个id的id)的事件
      • 使服务器中断/完成连接
  3. 如果服务器断开了连接,客户端将尝试使用新请求重新连接。这一次请求将有一个Last-Event-Id头,现在您跳到第2个

这种方法唯一的问题是客户端造成的延迟,因为它必须建立两个连接。我还没有测试延迟,但看起来每个请求之间大约有3-5秒。