多主题订阅

时间:2020-03-18 05:55:02

标签: node.js websocket

我为多个websocket连接编写了以下代码,遇到一些问题需要一些帮助,例如,当我订阅一个组(主题1),一段时间后尝试订阅另一个组(主题2),然后再订阅上一个主题(主题1)已被订阅将断开连接,请帮助我

    var WebSocket = require('ws');
    var node = this;
    let urls =msg.payload.urls;
    let connections = {};
    for(let k in connections) {
        connections[k].close();
        connections[k].reconnect=false
        console.log('connection closed:::');
            }

    for(let i=0;i<urls.length;i++){
        console.log(':::::::for loop:::::::')
        console.log('url----'+urls[i])
        function connect(urlIndex) {
                let ws;
                if(urlIndex!=undefined||urlIndex!=null){
                    ws = new WebSocket(urls[urlIndex]);
                }
                else{
                    ws = new WebSocket(urls[i]);    
                }
                ws.index=i;
                ws.reconnect=true;
                ws.onopen = function() {

                };

              ws.onmessage = function(e) {
                console.log('Message:', e.data);
                 msg.payload=e.data;
                 node.send(msg);
              };

              ws.onclose = function(e) {
                console.log('Socket is closed. Reconnect will be attempted in 1 second.', e.reason);
                setTimeout(function() {
                    console.log("onclose ----ws reconnect"+ws.reconnect)
                    if(ws.reconnect){
                        console.log("inside if reconnect")
                    connect(ws.index);
                    }
                }, 30000);
              };

              ws.onerror = function(err) {
                console.error('Socket encountered error: ', err.message, 'Closing socket');
                ws.close();
              };
            connections[urls[i]]=ws
            }
            connect();

            }

0 个答案:

没有答案