socket.io 与私人房间聊天

Posted

技术标签:

【中文标题】socket.io 与私人房间聊天【英文标题】:socket.io chat with private rooms 【发布时间】:2011-11-18 16:16:15 【问题描述】:

我开始研究 node 和 socket.io。

我已经创建了一个简单的聊天应用程序,我对它的简单程度感到惊讶。

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

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

我阅读了 0.7 的新房间功能。那会是一条路吗?每次2个用户需要私聊时动态创建一个新房间?但是如何通知第二个用户创建了新房间,以便他可以在那里连接?

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

谢谢

【问题讨论】:

【参考方案1】:

Hej 托马斯

如果只有 2 个用户在说话,则您不需要使用发布 att,只需将该消息从客户端发送到服务器,然后让服务器找到另一个客户端并将其发送。

【讨论】:

没有。事实并非如此。假设我有 100 个用户,即 Bob 想与 Jeff 交谈 这是我的观点,如果 bob 想与 jeff 交谈,他们不需要自己的房间,只需将其直接发送给 jeff 并发出“privateMsg”,它只会发送给 jeff。【参考方案2】:

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

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

【讨论】:

对。你俩都是对的。如果我想要一群人怎么办 要么使用内置的 Socket.IO 房间功能,要么通过将连接分组到某种数据结构中来滚动您自己的功能,然后遍历房间中的所有成员并发送数据在每一个。 我更喜欢使用内置功能,但是如何动态创建和销毁房间? 您可以在Readme 上阅读有关房间的信息,但基本上您调用socket.join('name of room') 为房间添加一个套接字,然后调用io.sockets.in('name of room').emit(...) 向该房间的套接字发送消息。 谢谢。有没有破坏房间的方法?

以上是关于socket.io 与私人房间聊天的主要内容,如果未能解决你的问题,请参考以下文章

Node 和 Socket.IO - 私人聊天(一对一)

如何使用 socket.io-p2p 在房间内建立对等连接?

使用 MERN 堆栈和 socket.io 进行私人聊天

Socket.io 是聊天模块的理想选择吗

socket.io多房间聊天

Socket.io 随机聊天室