【问题标题】:Multiple Handlers for Websocket JavascriptWebsocket Javascript 的多个处理程序
【发布时间】:2016-08-29 16:03:35
【问题描述】:

是否有可能我们可以为同一个 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
        });

    };

【问题讨论】:

    标签: javascript extjs websocket


    【解决方案1】:

    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
    });
    

    【讨论】:

    • @user2508337 - 这回答了你的问题吗?
    • 您好,感谢您的回复。
    • 您好,感谢您的回复。实际上,我正在开发 Extjs 多选项卡应用程序,所有选项卡都有自己单独的视口。所以现在每当我打开一个新选项卡时,我都必须创建一个新的 websocket 会话。那么有没有可能让我在这种情况下只为所有选项卡创建一个会话。因为从维护的角度来看,创建多个 websocket 会话资源很困难。
    • @user2508337 - 为多个选项卡只创建一个 webSocket 并让它们都共享一个连接会非常复杂。您必须在所有选项卡之间执行窗口间消息,确保一个选项卡具有打开的连接,并且所有其他窗口都从该主窗口发送/接收消息。然后,如果主选项卡关闭,另一个必须创建新连接并成为新的主选项卡。让每个选项卡都有自己的 webSocket 连接非常复杂,而且可能要简单得多。
    猜你喜欢
    • 2016-04-10
    • 2022-10-07
    • 1970-01-01
    • 2018-05-03
    • 2019-03-04
    • 2021-09-08
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多