我正在尝试进入网络推送技术,所以我开始四处寻找。我基本上找到了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/