我正在尝试进入网络推送技术,所以我开始四处寻找。我基本上找到了两种技术,即Websockets和SSE。由于缺乏perl支持而排除了Websockets之后,我想尝试更本机的SSE方法。
现在,尝试让SSE工作是一件很痛苦的事情。每个文档都有相互矛盾的信息,关于SSE是如何工作的,似乎没有一个普遍的共识。一些人说你需要一个<event-listen src="events.pm">标签,另一些人说你只需要一个EventSource JS对象。即使使用EventSource对象,我也发现了大约4种可能的实现,但它们似乎都不起作用。
这是我所拥有的。我有一个events.pm,它使用mod-perl。如果调用该文件,它将返回data: I haz a websocket。它与内容类型的application/x-dom-event-stream一起发送。
HTML和JS文件经常被不同的实现重写,以至于我放弃了它们。你们能给我一个可行的例子吗?
另外:我不明白如何向客户发送特定的消息。发送预定义的消息似乎没问题。然而,如果我想象有人给我发了一条消息,我不明白该信息(‘有一条新消息给你’)到底是如何传输到需要该信息的浏览器的。我在这上面找到的每一篇文章充其量都是模糊的。
编辑
基本上,我需要的是一种方式来说‘嘿,你可以收到这个通知吗?先给我看看你的id/会话/令牌!’以每个连接的客户端为基础。我想知道上交所是否有可能做到这一点。
发布于 2011-09-03 02:55:32
我想说的是,服务器发送的事件在Stream Updates with Server-Sent Events文章中描述得很好,也就是事件流格式。在Firefox6中,SSE现在被大多数现代浏览器支持(不幸的是,IE除外)。
我不明白你怎么才能向客户发送特定的消息。发送预定义的消息似乎没问题。然而,如果我想象有人给我发了一条消息,我不明白该信息(‘有一条新消息给你’)到底是如何传输到需要该信息的浏览器的。
客户端与SSE服务器之间通过保活事件流连接,单向连接只有在浏览器/标签关闭、用户调用close方法或网络连接丢失时才会关闭。
基本上,我需要的是一种方式来说‘嘿,你可以收到这个通知吗?先给我看看你的id/会话/令牌!’以每个连接的客户端为基础。我想知道上交所是否有可能做到这一点。
这种身份验证逻辑需要在服务器端执行,因此它取决于您使用的语言或平台。除非在您的环境中有相应的库,否则您可能必须编写它。
发布于 2013-01-09 08:57:51
规范已经改变/发展了。当前版本使用EventSource对象。HTML元素消失了。
当前的MIME类型为text/event-stream。x-dom-event-stream只在早期实现中使用(Opera2006年)。
要识别/验证客户端,您可以使用cookie或连接到包含某种身份验证令牌(会话ID)的事件流URL,然后您就会知道特定的TCP/IP连接与该用户相关联。
http://html5doctor.com/server-sent-events/
发布于 2014-04-15 20:37:52
除了@porneL的回答之外,你还可以告诉EventSource在它发送的请求中包含cookie。只需像这样创建EventSource对象:
var evtsrc = new EventSource('./url_of/event_stream/',{withCredentials:true});我用最新版本的chrome和firefox进行了测试。
来源:http://www.sitepoint.com/server-sent-events/
编辑:显然这不是必需的/无用的。请参阅@Tamlyn的评论。
https://stackoverflow.com/questions/6109418
复制相似问题