【问题标题】:Multiple instances of socket using Socket.io使用 Socket.io 的多个套接字实例
【发布时间】:2018-01-23 16:27:34
【问题描述】:

在我的网络应用程序的一部分中,有一些带有详细注释的项目,可以由几个人同时编辑。这导致了问题,所以我决定实现 socket.io,以便实时推送更改。它工作得很好。问题是我对所有笔记都使用相同的套接字。如果两个人正在编辑两个不同的笔记,我希望他们使用不同的套接字。我什至不知道如何搜索这个问题。我想每个套接字都是由注释 ID 唯一的。有什么建议吗?

【问题讨论】:

    标签: javascript node.js typescript websocket socket.io


    【解决方案1】:

    无需使用单独的套接字来编辑不同的笔记。当您发送一个注释的编辑时,您可以只发送一个带有编辑的注释的 id,这样当服务器收到一个编辑时,它就可以准确地知道该编辑属于哪个注释。

    如果您需要更具体的帮助,您必须向我们展示您的实际代码。

    如果两个人正在编辑两个不同的笔记,我希望他们使用不同的套接字。

    这不是必需的,也可能是不可取的。您可以通过同一个套接字将保留的消息发送到许多不同的笔记。套接字只是一个通信通道。它不必绑定到特定的数据。您只需在要发送的消息中包含某种标识符,以便消息的接收者知道该消息属于哪些数据。

    【讨论】:

    • 这是有道理的。我发送注释 ID 以确保只有正确的注释随文本更新。问题是,无论数据库中实际更新了哪个注释,当前连接到该套接字的所有客户端都将获得更新文本的输出。我仍然可以确保只更新相同的笔记,但为什么每分钟收到 200 条与你的笔记无关的回复?对此的最佳做法是什么?我是否应该跟踪哪个客户在哪个便笺上,并以某种方式只推送给那些编辑相同便笺的客户?感谢您的帮助。
    • @cbrawl - 您可以使用“房间”的服务器端概念来管理谁收到哪些数据。如果您的服务器知道哪些客户端对哪些笔记感兴趣,它可以将该客户端的套接字添加到一个房间,该房间的名称是从笔记的 id 派生的。一个连接可以在多个房间中。然后,当注释被修改时,您可以使用io.to(roomId).emit(...) 向该房间中的所有客户端广播。您将必须维护房间,以便适当地从房间添加或删除客户以获取特定注释。查看服务器上的socket.join()socket.leave()
    • 谢谢,这回答了我的问题。我会调查房间。
    猜你喜欢
    • 2016-10-26
    • 2019-06-06
    • 2020-08-18
    • 2013-12-28
    • 2018-01-19
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 2017-06-14
    相关资源
    最近更新 更多