向EventSource构造函数提供上一个事件Id
Provide Last-Event-Id to EventSource constructor
是否可以设置EventSource的Last Event Id标头?我有一个简单的聊天应用程序,可以缓存消息。当我连接时,我会发送自上次事件Id以来的所有聊天,如果没有提供,则发送所有聊天。
由于我保留了这些消息,我想我可以将Id传递给EventSource构造函数,以避免它返回我已经拥有的所有消息。这根本不可能吗?
您可以传递查询字符串的信息。
var source = EventSource("source?eventId=12345");
最终,您可以在服务器端理解它并返回正确的事件。
如果连接中断并且客户端必须重新连接,EventSource请求将仅具有Last-Event-Id
标头。你可以"力";通过让服务器断开第一个连接来重新连接。
它是这样的:
- 使用EventSource创建连接
- 服务器接收该请求并测试
Last-Event-Id
是否是请求头。- 如果存在
Last-Event-Id
:- 获取值/id
- 根据id从服务器发送事件
- 如果
Last-Event-Id
不存在:- 发送一个包含id(您认为是最后一个id的id)的事件
- 使服务器中断/完成连接
- 如果存在
- 如果服务器断开了连接,客户端将尝试使用新请求重新连接。这一次请求将有一个
Last-Event-Id
头,现在您跳到第2个
这种方法唯一的问题是客户端造成的延迟,因为它必须建立两个连接。我还没有测试延迟,但看起来每个请求之间大约有3-5秒。
相关文章:
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 添加一个javascript函数来下载elfinder上的事件
- 完整日历在多个资源上添加一个事件
- jQuery UI 选项卡取消选择事件或在选择时保存上一个选项卡
- JavaScript一次性在多个元素上注册一个事件类型
- 一个控制器如何在 Ember .js 中观察任意控制器/模型上的事件
- 客户端始终响应上一个服务器发送的事件,而不是当前事件
- CasperJs then() 是否等待上一个函数中发出的事件
- 按 F5 或页面上的刷新按钮不应调用上一个事件
- 在input.checked=true/false _without_ jQuery上触发一个事件
- 一个元素上的事件以触发另一个元素上的事件
- event.cyTarget 坚持上一个事件
- 几个元素上的一个事件
- HTML5:如何在iOS中获得本地播放器上一个和下一个按钮事件
- jQuery文件上传插件:当所有文件都上传时触发一个事件
- AngularJS指令-如何让一个事件只触发一次,否则它'将在多个元素上触发
- 在执行上一个的处理程序之前检查下一个事件以隐藏自动完成
- 如何让JQuery等待上一个事件触发
- 如果jQuery.show()在上一个事件中使用,则jQuery不会隐藏DIV
- 向EventSource构造函数提供上一个事件Id