Websocket Javascript的多个处理程序

Vai*_*iar 7 javascript extjs websocket

那可能我们可以为同一个webcocket会话提供多个处理程序(onmessage方法)吗?在下面的代码中,只有一个onmessage方法来处理来自客户端的消息.但是,我们是否有可能为同一个websocket会话提供多个onmessage处理程序方法?

码:

    var url = window.location.href;
    var arr = url.split("/");
    var redirectURL = arr[0] + "//" + arr[2];
    var wsURL = redirectURL.replace('http','ws');
    var ws = new WebSocket(wsURL+'/abc');
    ws.onopen = function(event) {
        var data = '{"userId":' + sessionStorage.getItem('userID') + '}';
        ws.send((data));
    };

    ws.onmessage = function(event) {
        var msg = event.data;
        console.info('Push Message : ' + msg);
        Ext.toast({
             html: msg,
             title: 'Alert',
             align: 'br',
             autoShow : true
        });

    };
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 13

WebSocket对象支持.addEventListener()的话,你可以这样做:

var url = window.location.href;
var arr = url.split("/");
var redirectURL = arr[0] + "//" + arr[2];
var wsURL = redirectURL.replace('http','ws');
var ws = new WebSocket(wsURL+'/abc');
ws.addEventListener("open", function(event) {
    var data = '{"userId":' + sessionStorage.getItem('userID') + '}';
    ws.send((data));
});

ws.addEventListener("message", function(event) {
    var msg = event.data;
    console.info('Push Message : ' + msg);
    Ext.toast({
         html: msg,
         title: 'Alert',
         align: 'br',
         autoShow : true
    });

});

// some other listener for incoming messages
ws.addEventListener("message", function(event) {
    // code here
});
Run Code Online (Sandbox Code Playgroud)

  • @ user2508337 - 为多个选项卡只创建一个 webSocket 并让它们共享一个连接会非常复杂。您必须在所有选项卡之间执行窗口间消息,确保一个选项卡具有打开的连接,并且所有其他窗口从该主窗口发送/接收消息。然后,如果主选项卡关闭,另一个人将不得不创建一个新连接并成为新的主选项卡。让每个选项卡都有自己的 webSocket 连接非常复杂,而且可能要简单得多。 (2认同)