1

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

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

4

2 回答 2

2

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

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

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

于 2016-07-21T05:37:33.363 回答
0

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

它是这样的:

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

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

于 2022-02-16T15:28:17.430 回答