微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 每个应用程序应该只有一个EventSource对象吗?

当使用 Server-Sent Events时,如果客户端建立多个连接以接收它感兴趣的不同事件,或者应该有一个连接,并且客户端通过单独的通道显示什么感兴趣的话? IMO后者似乎更为可取,尽管有些可能使客户端代码更加复杂.该规范支持命名事件(与特定主题相关的事件),对我来说,建议将服务器发送事件连接用作所有事件的单个通道.

以下代码说明了启动多个服务器发送事件连接的第一种情况:

var EventSource eventSource1 = new EventSource("events/topic1");
eventSource1.addEventListener('topic1',topic1Listener,false);

var EventSource eventSource2 = new EventSource("events/topic2");
eventSource2.addEventListener('topic2',topic2Listener,false);

eventSource1将收到“topic1”事件,eventSource2将收到“topic2”事件.虽然这很简单,但是对于您感兴趣的每个主题,都会发生挂起的GET,效率也非常低.

替代方案如下:

var EventSource eventSource3 = new EventSource("/events?id=1234")
eventSource3.addEventListener('topic3',topic3Listener,false);
eventSource3.addEventListener('topic4',topic4Listener,false);

var subscription = new XMLHttpRequest();
subscription.open("PUT","/events/topic3?id=1234",true);
subscription.send();

在此示例中,单个EventSource将存在,并且特定事件的兴趣将由具有Server-Sent事件连接的单独请求指定,并且注册由id参数相关联. topic3Listener将收到“topic3”事件,topic4Listener不会.虽然要求稍微更多的代码是有益的,只有一个连接,但事件仍然可以被识别和处理不同.

在网络上有一些示例显示使用命名事件,但似乎事件名称(或主题)是事先知道的,所以不需要客户端注册与服务器的兴趣(example).虽然我还没有看到一个显示多个EventSource对象的示例,但我还没有看到一个示例,显示客户端使用单独的请求来注册特定主题的兴趣,正如我在上面做的.我对规范的解释使我相信,表示对某个主题(或事件名称)的兴趣完全取决于开发人员,并且可以静静地与客户端了解其将要接收的事件的名称,动态地与客户端通知服务器它感兴趣接收特定事件.

我会很乐意听别人的想法.注意:我通常是一个Java开发人员,所以请原谅我平庸的JS代码..

原文地址:https://www.jb51.cc/js/154483.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐