如何在socket.io中基于2个用户创建房间?

Jac*_*ovi 3 sockets node.js socket.io

我的目标是根据两个不同的用户创建一对一的聊天。我唯一想到的方法是使用socket.io房间

但是现在的问题是我如何创建独特的房间?

例如

socket.on('join', function(room) {
   socket.join(room);
});
Run Code Online (Sandbox Code Playgroud)

我需要从客户那里散发房间吗,如果是的话,如何使它变得独一无二。想象有成千上万的用户。

聊天应用程序类似于Facebook聊天应用程序。在这里您可以一对一聊天。

我需要redis或mongodb来存储房间吗?谁有大规模使用socket.io的经验,请分享您的意见

谢谢!

Dav*_*rez 5

一个房间始终是唯一的,socket.join('roomname')如果不存在该房间,则会创建该房间,并且此套接字将加入该房间;如果存在,则该套接字将加入它。

因此,例如,如果您希望客户端A加入客户端B所在的房间,则可以从客户端A发送如下事件:

socket.emit('joinroom', roomname);
Run Code Online (Sandbox Code Playgroud)

在服务器上:

socket.on('joinroom', function(data){
     socket.join(data)
  })
Run Code Online (Sandbox Code Playgroud)

无论如何,当套接字连接时,它会自动创建并加入自己的房间,这个房间的名称将是该套接字的ID,因此我认为不必为基于两个不同用户的聊天创建新房间。

您需要做的就是将套接字ID与用户的永久属性链接在一起。

编辑:

我在这里给您一个简单的聊天应用示例,您可以在其中打开多个对话:

server.js:https//gist.github.com/pacmanmulet/b30d26b9e932316f54b2

index.html:https//gist.github.com/pacmanmulet/6481791089effb79f25f

您可以在这里进行测试:https : //chat-socket-io-example.herokuapp.com/

我没有使用房间,当您要发送到一组套接字而不是单个套接字时,它具有更大的意义。希望你能更好地理解我的想法