javascript - Server-Sent Events 究竟是如何工作的?

标签 javascript perl server-sent-events

我正在尝试进入网络推送技术,所以我开始四处寻找。我基本上找到了2个技术,Websockets和SSE。由于缺乏 perl 支持而排除了 Websockets 之后,我想尝试更原生的 SSE 方法。

现在,试图让 SSE 正常工作真是一件令人头疼的事情。每个文档都有相互矛盾的信息,并且似乎没有就 SSE 的工作方式达成普遍共识。有人说你需要一个 <event-listen src="events.pm">标签,其他人说你只需要一个 EventSource对象。即使使用 EventSource 对象,我也发现了大约 4 种可能的实现,但它们似乎都不起作用。

这是我的。我有一个 events.pm ,它使用 mod-perl。如果调用该文件,它会返回 data: I haz a websocket .这是与内容类型 application/x-dom-event-stream 一起发送的.

HTML 和 JS 文件经常被不同的实现重写,以至于我放弃了它们。你们能给我一个工作示例吗?

另外:我不明白您如何向客户端发送特定消息。发送预定义的消息似乎没问题。但是,如果我想象有人向我发送消息的情况,我不明白该信息(“有一条新消息”)究竟是如何传输到需要该信息的浏览器的。我在这方面找到的每篇帖子充其量都是含糊不清的。

编辑

基本上,我需要的是一种方式来表达‘嘿,你可以收到这个通知吗?先给我看你的 id/session/token!基于每个连接的客户端。我想知道 SSE 是否完全有可能。

最佳答案

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

I do not understand how you can send specific messages to the client. Sending a predefined message seems to be fine. However, if I imagine a situation where someone sends me a message, I do not understand how exactly that information ('there is a new message for you') is transmitted to that exact browser that needs that information.

客户端通过 keep-alive 事件流与 SSE 服务器连接,单向连接在浏览器/选项卡关闭、用户调用关闭方法或网络连接丢失之前不会关闭。

Basically, what I need is a way to say 'hey, are you allowed to get this notification? show me your id/session/token first!' on a per connected client basis. I wonder if it is at all possible with SSE.

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

关于javascript - Server-Sent Events 究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6109418/

相关文章:

javascript - 谷歌折线图上的趋势线

javascript - 没有滚动条的 CSS 可拖动导航

linux - 如何使用shell脚本将两列分成数组

multithreading - 在线程内创建共享变量可以吗?

javascript - 使用reduce和map获取数组中对象的频率

javascript - jQuery $ 在 Firefox 中不是一个函数,在 Chrome 中工作并且与 $(document).ready() 一起工作

perl - 如何安装一组特定版本的 Perl 模块?

java - 服务器发送事件 (SSE) 集群连接处理

JavaScript EventSource 在 Apache 基本身份验证后不会打开连接

java - 停止服务器发送事件中的重复输出