服务器发送的事件究竟是如何工作的
How exactly does Server-Sent Events work?
我正试图进入网络推送技术,所以我开始四处寻找。我基本上找到了两种技术,即Websockets和SSE。在由于缺乏perl支持而排除了Websockets之后,我想尝试更原生的SSE方法。
现在,试图让苏格兰和南方能源公司工作真的很痛苦。每一份文件都有相互矛盾的信息,而且似乎对SSE的工作方式没有达成普遍共识。有人说你需要一个<event-listen src="events.pm">
标签,还有人说你只需要一个EventSource
JS对象。即使使用EventSource对象,我也发现了大约4种可能的实现,但它们似乎都不起作用。
这是我的东西。我有一个events.pm
,它使用modperl。如果调用该文件,它将返回data: I haz a websocket
。这是用内容类型application/x-dom-event-stream
发送的。
HTML和JS文件经常被不同的实现重写,以至于我放弃了它们。你们能给我举个例子吗?
此外:我不明白你如何向客户发送特定的消息。发送预定义的消息似乎很好。然而,如果我想象有人给我发消息的情况,我不明白这些信息("这是给你的新消息")是如何传输到需要这些信息的浏览器的。我在这上面发现的每一篇帖子充其量都是模糊的。
编辑
基本上,我需要的是一种方式来说‘嘿,你被允许收到这个通知吗?先给我看看你的id/session/token!'基于每个连接的客户端。我想知道苏格兰和南方能源公司是否有可能做到这一点。
我想说,在"使用服务器发送的事件进行流更新"一文中,即"事件流格式"中,对服务器发送事件的描述非常好。现在大多数现代浏览器都支持Firefox 6 SSE(不幸的是,IE除外)。
我不明白你如何向客户发送特定的消息。发送预定义的消息似乎很好。然而,如果我想象有人给我发信息的情况,我不明白是怎么回事确切地说,这些信息("这是给你的新消息")传输到需要该信息的确切浏览器。
客户端通过保持活动事件流与SSE服务器连接,单向连接在浏览器/选项卡关闭、用户调用关闭方法或网络连接丢失之前不会关闭。
基本上,我需要的是一种方式来说‘嘿,你被允许得到吗这个通知?先给我看看你的id/session/token!'在连接客户端基础。我想知道苏格兰和南方能源公司是否有可能做到这一点。
这种身份验证逻辑需要在服务器端进行,因此它取决于您使用的语言或平台。除非您的环境中有这样的库,否则您可能必须编写它。
规范发生了变化。当前版本使用EventSource
对象。HTML元素不见了。
当前MIME类型为text/event-stream
。x-dom-event-stream
仅在早期实现中使用(Opera于2006年)。
要识别/验证客户端,您可以使用cookie,也可以连接到包含某种身份验证令牌(会话ID)的事件流URL,然后您就会知道特定的TCP/IP连接与该用户相关联。
http://html5doctor.com/server-sent-events/
添加到@porneL的答案;您可以告诉EventSource
在其发送的请求中包含cookie。只需创建EventSource
对象,如下所示:
var evtsrc = new EventSource('./url_of/event_stream/',{withCredentials:true});
我用最新版本的chrome和firefox进行了测试。
来源:http://www.sitepoint.com/server-sent-events/
编辑:显然这没必要/没用。请参阅@Tamlyn的评论。
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- 在JavaScript中的类中,push和concat的工作方式有何不同