在应用程序中打开 Sockjs

Open Sockjs inside an application

我想创建一个应用程序,在第 3 页用户开始通过 sockjs websocket 进行通信(他们通过第 1 页和第 2 页到达第 3 页)。代码工作正常,但我不知道为什么!

// Global scope
var sock;

// Inside a function page3, this is invoked when Page3 loads for the first time
function page3(){
   // Local scope
   sock= new SockJS("localhost:8080/messages);
   sock.onopen= function(){
   ....
   };

   sock.onmessage= function(data){
   ....
   };   
}

我的问题是 - 当消息从服务器发送时,程序执行如何访问 sock.onmessage,即使它是 'seen' 只有在第一次加载 Page3 时,即 function page3() 被调用了?

看起来 sock 没有被导入(错误消息说它是未定义的)

也许如果您能分享更多代码,我们就能明白原因

找到我自己的答案。

这个问题实际上与客户端事件监听器的可见性有关。答案是 - 客户端上的所有事件侦听器一旦被激活(程序执行流程有 "seen" 它们)将保持活动状态,直到它们被删除。

因此,在上述情况下,即使 function page3() 仅通过程序执行一次 "seen" - 当第一次加载 Page3 时, sock.onmessage 在此期间被激活为(客户端)事件侦听器page3() 函数调用并继续保持活动状态直到套接字关闭。

因此,不需要显式 page3() 函数调用来触发 sock.onmessage。它(sock.onmessage)会一直监听服务器发送的套接字事件。