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