提问者:小点点

socket.io用户到用户通信


我正在尝试创建一个基本的聊天应用程序。我正在使用socket.io,我很难弄清楚应该如何处理用户与用户之间的通信。

我在这里读到了一些答案:如何用socket.io向特定客户机发送消息

但我还是很困惑,假设我有3个用户,A,B和C.我想让A和B说话,我想让C和B说话。当然,A应该不会看到B和C互相发送的消息,反之亦然。

socket rooms的想法似乎很棒,但在我看来,任何人都可以加入“房间”并看到彼此的信息。

我很困惑,不知道该怎么处理。我读到另一个答案,这是每个用户将有一个套接字,所以我可以使用套接字发送消息。就像这样:

用户ID->;套接字编号1
B用户ID->套接字编号2
C用户ID->插座编号3

所以当A向be发送消息时,它会将它从A的套接字发送到B的套接字。

但我不确定我说对了。


共1个答案

匿名用户

一个“房间”只是一个容器,而不是(必须)被认为是一个聊天室。如果你只想让A-B和C-B彼此交流,那么就把它们放在两个单独的房间里。记住,API不允许客户端加入任意房间。服务器决定将客户端套接字放入哪些房间。

根据您的用例,当a向服务器发出信号,它们希望与b通信时,在服务器端设置一个房间,并将ab服务器端套接字放入该房间。然后,当a发送聊天消息时,您可以查找a所属的各个房间,并决定向哪个房间广播(io.in(。。。)。emit(。。。))该消息。

相反,如果您真的想要点对点通信,那么Socket.io可能并不是完成这项工作的最佳工具?这仍然是绝对可行的,但是您引入了一个额外的跃点。
在这种情况下,您可以让您的服务器从a(它还包含收件人的标识符)接收消息,确定收件人是谁,然后将消息直接发送到该套接字(每个套接字都属于一个名称与socket.id相同的“房间”)