在服务器上获取选项卡的套接字实例



我必须在node.js模块的服务器上的ajax请求获得套接字实例。这是我的代码。

app.js

io.set('authorization', function (handshake, callback) { 
   if (handshake.headers.cookie) {
       cookieParser(handshake, null, function(err) {
           handshake.sessionID = handshake.signedCookies['express.sid'];
       });
   } else { return callback('No cookie transmitted.', false); }
});
io.sockets.on('connection', function(socket) { 
    var session = socket.handshake.session;
    var userid = session.userid;   
    socket.join("room");
    //make user offline 
    socket.on('disconnect', function() {
        //my code goes here...
        //make user offline 
    })
});

现在在我的一个ajax请求中,我想要socket实例

app.post('/logout', function (req, res) { 
   //here i want socket instance, so I can emit message to all socket, accept this.
});

据我所知,每个选项卡创建它自己的新的套接字连接,但会话是唯一的浏览器的所有选项卡之间。所以,我如何存储套接字的每个选项卡在服务器端,在那里我可以很容易地找到套接字实例,然后广播消息到所有套接字,不包括套接字,这是创建事件。(表示用户的活动选项卡的套接字连接)

任何猜测。

谢谢

在我的应用程序中,我可以做你说的,因为我使用命名空间和房间,所以在一个房间里,我可以找到某人的每个套接字。

io.of('/user').clients(idRoom);

这样我就可以删除用户的每个套接字。但如果你不能使用这个,我认为在你的应用程序你将不得不实现外部套接字。为某人创建一个类(使用session来查看它是否已经打开了套接字,或者是否必须创建一个新实例)。在这门课上,有一个套接字表,这样你就可以处理别人的套接字。

在我的情况下,我做了相同的,除了我使用插座的房间。

广播到每个套接字,这取决于你的应用程序是什么。如果你的应用程序发送到相同命名空间中的任何人,它不会改变任何东西,因为相同会话的套接字也会收到消息。但如果没有,您将不得不实现一个函数来向上面建议的表的每个套接字发出。在我的情况下,我使用'排除'来确保当前套接字不接收消息,但通常你可以使用广播。

io.of('/user').in(this.id).except(socket.id).emit('msg', { text: text,type:person});

总结,socket。IO不会帮助你处理一个用户/会话的会话和几个套接字,但你可以使用房间功能来处理它(在我的情况下,这是最好的方法),或者实现一个用户类,在那里你将管理会话套接字的表。

相关内容

  • 没有找到相关文章

最新更新