【问题标题】:Socket.io user to user communicationSocket.io 用户到用户通信
【发布时间】:2021-01-20 10:19:13
【问题描述】:

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

我在这里阅读了一些答案: How to send a message to a particular client with socket.io

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

这个套接字房间的想法似乎很棒,但在我看来,任何人都可以加入“房间”并查看彼此的消息。

我很困惑,不知道该如何处理。 我读了另一个答案,即每个用户都有一个套接字,所以我可以使用套接字发送消息。 所以是这样的:

用户 ID -> 套接字号 1
B 用户 ID -> 套接字号 2
C 用户 ID -> 套接字号 3

所以当A发送消息时,它会从A的socket发送到B的socket。

但我不确定我是否正确。

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

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

    按照您的用例,当A 向服务器发出他们想与B 通信的信号时,在服务器端设置一个房间,并同时放置AB到那个房间的服务器端套接字。然后,当A 发送聊天消息时,您可以查找A 所属的各个房间,并决定向哪些房间广播(io.in(...).emit(...))该消息。

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

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2014-03-17
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多