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代码..

相关文章

事件冒泡和事件捕获 起因:今天在封装一个bind函数的时候,发现el.addEventListener函数支持第三个参数...
js小数运算会出现精度问题 js number类型 JS 数字类型只有number类型,number类型相当于其他强类型语言...
什么是跨域 跨域 : 广义的跨域包含一下内容 : 1.资源跳转(链接跳转,重定向跳转,表单提交) 2.资源...
@ "TOC" 常见对base64的认知(不完全正确) 首先对base64常见的认知,也是须知的必须有...
搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : 的缩写,说都能直接说出来 :模型, :视图, :视图模...
首先我们需要一个html代码的框架如下: 我们的目的是实现ul中的内容进行横向的一点一点滚动。ul中的内容...