以下代码说明了启动多个服务器发送事件连接的第一种情况:
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 举报,一经查实,本站将立刻删除。