首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器发送的事件究竟是如何工作的?

服务器发送的事件究竟是如何工作的?
EN

Stack Overflow用户
提问于 2011-05-24 19:03:19
回答 3查看 11.6K关注 0票数 17

我正在尝试进入网络推送技术,所以我开始四处寻找。我基本上找到了两种技术,即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/会话/令牌!’以每个连接的客户端为基础。我想知道上交所是否有可能做到这一点。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-03 02:55:32

我想说的是,服务器发送的事件在Stream Updates with Server-Sent Events文章中描述得很好,也就是事件流格式。在Firefox6中,SSE现在被大多数现代浏览器支持(不幸的是,IE除外)。

我不明白你怎么才能向客户发送特定的消息。发送预定义的消息似乎没问题。然而,如果我想象有人给我发了一条消息,我不明白该信息(‘有一条新消息给你’)到底是如何传输到需要该信息的浏览器的。

客户端与SSE服务器之间通过保活事件流连接,单向连接只有在浏览器/标签关闭、用户调用close方法或网络连接丢失时才会关闭。

基本上,我需要的是一种方式来说‘嘿,你可以收到这个通知吗?先给我看看你的id/会话/令牌!’以每个连接的客户端为基础。我想知道上交所是否有可能做到这一点。

这种身份验证逻辑需要在服务器端执行,因此它取决于您使用的语言或平台。除非在您的环境中有相应的库,否则您可能必须编写它。

票数 8
EN

Stack Overflow用户

发布于 2013-01-09 08:57:51

规范已经改变/发展了。当前版本使用EventSource对象。HTML元素消失了。

当前的MIME类型为text/event-streamx-dom-event-stream只在早期实现中使用(Opera2006年)。

要识别/验证客户端,您可以使用cookie或连接到包含某种身份验证令牌(会话ID)的事件流URL,然后您就会知道特定的TCP/IP连接与该用户相关联。

http://html5doctor.com/server-sent-events/

票数 7
EN

Stack Overflow用户

发布于 2014-04-15 20:37:52

除了@porneL的回答之外,你还可以告诉EventSource在它发送的请求中包含cookie。只需像这样创建EventSource对象:

代码语言:javascript
复制
var evtsrc = new EventSource('./url_of/event_stream/',{withCredentials:true});

我用最新版本的chrome和firefox进行了测试。

来源:http://www.sitepoint.com/server-sent-events/

编辑:显然这不是必需的/无用的。请参阅@Tamlyn的评论。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6109418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档