Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Nodejs:始终连接到同一个套接字_Node.js_Jsp_Socket.io - Fatal编程技术网

Node.js Nodejs:始终连接到同一个套接字

Node.js Nodejs:始终连接到同一个套接字,node.js,jsp,socket.io,Node.js,Jsp,Socket.io,下面是nodeJS代码: exports.initialize = function(app,server) { var io = require('socket.io'); var http = require("http"); var url = require("url"); io = io.listen(server); var userList={} io.sockets.on("connection", function(socket)

下面是nodeJS代码:

exports.initialize = function(app,server) {
    var io = require('socket.io');
    var http = require("http");
    var url = require("url");
    io = io.listen(server);
    var userList={}
    io.sockets.on("connection", function(socket){
        socket.on('connectNotfServer', function(message){

                userList[message.userId]=socket;
                console.log("Get connected to user: "+message.userId);

        });
    });

    app.get('/notifyUser', function(req, res){
        var parsedUrl = url.parse(req.url, true);
        var params = parsedUrl.query;

            userList[params.to].emit('serverNotification',{notfication:params.message,id:params.id,time:params.time});
            res.end(JSON.stringify(params));

    });
};
现在在header.jsp中:

header.jsp在许多页面中导入。现在,如果打开page1.jsp,则打开page2.jsp。我收到了通知,但问题是我在page2.jsp中收到了消息,而不是在page1.jsp中,即我总是在最后打开的页面中收到消息。可能是因为丢失了旧的套接字连接

我想,如果有任何通知,它应该由所有网页收到。在FB中,您将看到,如果您有新的通知,它将在所有打开的FB页面中显示红色通知指示器


我认为只有在用户会话中使用相同的套接字实例时才有可能。但如何使用?

我正在做的临时解决方案是为用户ID维护一个套接字实例数组。如果有任何事件,只需迭代所有实例并发送消息。类似于users[1]=[socket1,socket2]
 var socket = io.connect('myserver:3000');
 socket.on('serverNotification', function (data) {
         console.log("got message");
 });    
 socket.emit('connectNotfServer',{"userId":"123");