Javascript 获取选项卡';服务器上的套接字实例

Javascript 获取选项卡';服务器上的套接字实例,javascript,node.js,sockets,websocket,socket.io,Javascript,Node.js,Sockets,Websocket,Socket.io,我必须在node.js模块中的服务器上的ajax请求中获取套接字实例。这是我的密码 app.js 现在在我的一个ajax请求中,我想要一个套接字实例 app.post('/logout', function (req, res) { //here i want socket instance, so I can emit message to all socket, accept this. }); 正如我所知,每个选项卡都创建自己的新套接字连接,但会话在浏览器的所有选项卡之间是唯一的

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

app.js

现在在我的一个ajax请求中,我想要一个套接字实例

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);
这样我就可以删除用户的每个套接字。但是如果你不能使用它,我认为在你的应用程序中,你必须在socket.io之外为某人实现一个类(使用会话作为一种方式来查看它是否已经打开了一个socket或者你是否必须创建一个新实例)。在这个类中,有一个套接字表,这样你们就能够处理某人的套接字

io.of('/user').clients(idRoom);
在我的例子中,我也这样做,只是我使用socket.io的房间来做

要向每个套接字广播,这取决于你的应用程序是什么。如果您的应用程序发送给同一命名空间中的任何人,它不会更改任何内容,因为同一会话的套接字也将接收消息。但如果不是,您将必须实现一个函数,以向我上面建议的表的每个套接字发出。 在我的例子中,我使用“排除”来确保当前套接字不接收消息,但通常可以使用广播

io.of('/user').in(this.id).except(socket.id).emit('msg', { text: text,type:person});
总之,socket.io不会帮助您为一个用户/会话处理会话和多个套接字,但您可以使用room功能处理它(在我的情况下,这是最好的方法),或者实现一个用户类,您可以在其中管理会话套接字表