【问题标题】:Need to send message to other users, not the sender, over websocket需要通过 websocket 向其他用户发送消息,而不是发送者
【发布时间】:2017-12-29 18:36:49
【问题描述】:

我正在通过 websockets 构建发布/订阅机制。我的 websocket 工作正常,但是如何将消息从 userA 发送到 userB、userC 和 userD(这些是订阅 pub/sub 的其他用户)。

我正在使用 websocketsharp,并且我有打开的会话列表,所以我尝试使用 SendTo,但无法正常工作。

我只需要一个正确的方向。

顺便说一句,我可以轻松地从 userA 发送到服务器,从服务器返回到 userA,但我不知道如何转发给同样订阅的 userB、userC、userD。

这是我正在尝试做的一个小代码sn-p:

   class DDPServer : WebSocketBehavior, IClientSession
    {
        private SessionInfo sessionInfo;
        public static WebSocketSessionManager sessionQueue { get; set; } 
        // more stuff here
    }

sessionQueue 被分配了所有的会话。

所以,现在我已经完成了所有会话。请求由套接字服务器接收,通过 pub/sub 机制(提供订阅用户的列表),现在我尝试使用类似的方式将数据发送回:

DDPServer.sessionQueue.SendTo("test", "3d0f491cfb654dd4839337608b19f849");

其中 3d0f491cfb654dd4839337608b19f849 是会话 ID。

【问题讨论】:

  • 发给服务端,服务端再发给客户端。
  • 我可以把它发送到服务器,我可以把它发送回发送客户端,但是我如何将它转发给其他订阅的客户端?
  • 你能显示一些代码来澄清一下吗?如果您可以从服务器发送/接收,我不确定我是否理解您的问题。
  • 我只想转发给其他客户。 WebSocketSessionManager 中有一个 SendTo 方法,但我无法让它工作。它接受(字节数据,字符串id),这种情况下的id是什么??? session id,用户id???
  • 服务器必须知道其他客户端订阅了什么,服务器使用该知识来转发消息。客户端不应该知道其他客户端订阅了什么。

标签: c# websocket publish-subscribe


【解决方案1】:

WebSocketSessionManager 维护打开的连接,因此将其与 .SendTo("string data here", "string session id here") 一起使用,我可以发送到任何其他客户端。

所以,我将订阅用户,将频道与订阅用户列表存储在数据库中,将这些用户拉出,查找与这些用户关联的会话(如果有的话),然后运行一个 for 循环到 SendTo每个会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 2016-12-19
    • 2021-03-22
    • 1970-01-01
    • 2023-03-15
    • 2020-11-07
    相关资源
    最近更新 更多