问题 socket.io与私人房间聊天


我开始研究node和socket.io。

我已经创建了一个简单的聊天应用程序,我很惊讶它是多么容易。

现在,我想进一步提供一个在线用户列表,这些用户可以私下聊天。

什么是最好的方法来解决这个问题?

我读了0.7的新房间功能。这是一种方法吗?每次2个用户需要私下聊天时动态创建一个新房间?但是如何通知第二个用户创建的新房间,以便他可以连接到那里?

自己处理所有上述逻辑会更好吗?存储房间和用户服务器端并每次循环它们并发送消息到适当的?

谢谢


7242
2017-09-16 12:41


起源



答案:


如果您想要的唯一功能是两个人能够相互发送消息(而不是一组人有房间),那么逻辑可能是这样的:

  1. 当用户连接时,将其连接存储在由其用户名键入的对象中(或者在确保您可以找到特定用户连接的任何其他数据结构中)。
  2. 当Bob想要与Jeff交谈时,请向服务器发送一个说明此事件的事件。
  3. 服务器在步骤1中查找对象中Jeff的Socket.IO连接。
  4. 服务器使用此连接向私人消息发送Jeff(并且仅发送Jeff)。

13
2017-09-16 18:18



对。你们都是对的。如果我想要一群人怎么办? - Thomas
使用内置的Socket.IO房间功能,或者通过在某种数据结构中将连接分组在一起来自行滚动,然后迭代一个房间中的所有成员并在每个成员中发送数据。 - Michelle Tilley
我更喜欢使用内置功能,但你怎么能动态创建和销毁房间? - Thomas
你可以阅读关于房间的信息 自述,但基本上你打电话 socket.join('name of room') 添加套接字到房间,并打电话 io.sockets.in('name of room').emit(...) 向该房间的套接字发送消息。 - Michelle Tilley
谢谢。有破坏房间的方法吗? - Thomas


答案:


如果您想要的唯一功能是两个人能够相互发送消息(而不是一组人有房间),那么逻辑可能是这样的:

  1. 当用户连接时,将其连接存储在由其用户名键入的对象中(或者在确保您可以找到特定用户连接的任何其他数据结构中)。
  2. 当Bob想要与Jeff交谈时,请向服务器发送一个说明此事件的事件。
  3. 服务器在步骤1中查找对象中Jeff的Socket.IO连接。
  4. 服务器使用此连接向私人消息发送Jeff(并且仅发送Jeff)。

13
2017-09-16 18:18



对。你们都是对的。如果我想要一群人怎么办? - Thomas
使用内置的Socket.IO房间功能,或者通过在某种数据结构中将连接分组在一起来自行滚动,然后迭代一个房间中的所有成员并在每个成员中发送数据。 - Michelle Tilley
我更喜欢使用内置功能,但你怎么能动态创建和销毁房间? - Thomas
你可以阅读关于房间的信息 自述,但基本上你打电话 socket.join('name of room') 添加套接字到房间,并打电话 io.sockets.in('name of room').emit(...) 向该房间的套接字发送消息。 - Michelle Tilley
谢谢。有破坏房间的方法吗? - Thomas


赫杰托马斯

如果只有2个用户说你不需要使用发布att只需将该消息从客户端发送到服务器并让服务器找到另一个客户端并将其发送下来。


1
2017-09-16 14:15



不,情况并非如此。假设我有100个用户,即Bob希望与Jeff交谈 - Thomas
对,这是我的观点,如果鲍勃想和杰夫说话,他们不需要那里有自己的房间只需直接发送给杰夫并发出“privateMsg”,它只会去杰夫。 - megakorre