【问题标题】:push data from server to client with specified Id signalR将数据从服务器推送到具有指定 ID signalR 的客户端
【发布时间】:2013-05-24 21:42:04
【问题描述】:

我从不同的服务器接收到我的 Hub 类的数据。每个数据都有自己的 ID。每当数据到达服务器集线器时,它都会将我的数据推送到客户端。这就像工作进度。 我想将每个 ID 发送到具有唯一集线器 ID 的客户端。如何过滤来自服务器的消息?我用这种方式Clients.Client("ID1").send(data); 或者我必须在调用者属性中指定?任何人都可以帮助我。

问候, 山提尼

【问题讨论】:

    标签: signalr


    【解决方案1】:

    您可以使用ConnectionId 来识别客户端。

    连接新客户端后,将ConnectionId 存储在某处,以便您以后可以使用它来识别客户端。

    public class MyHub : Hub
    {
        public override Task OnConnected()
        {
            var connectionId = Context.ConnectionId;
            // store connectionId somewhere
            return base.OnConnected();
        }
    }
    

    要向客户端发送数据,请使用ConnectionId 标识它:

    public void SendNewData(string connectionId, object data)
    {
        var Context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
        Context.Clients.Client(connectionId).send(data);
    }
    

    如果您需要通过其他ID来识别客户,那么您应该存储您的ID和ConnectionId之间的关系。

    【讨论】:

    • 谢谢。我正在尝试将我的 connectionId 保存在数据库中。在此之前我还有一个问题。我所有的数据都通过队列。当它到达服务器集线器时,它将数据推送到客户端。现在,我如何知道哪些数据正在访问我的集线器? Hub 从队列中接收数据;它是一个连续的过程。来,点击显示。,那我如何过滤每个数据呢?这有意义吗?
    • 不确定我是否理解您的问题。将集线器视为一种通过将一些数据作为参数传递(来自服务器的客户端过程或来自客户端的服务器过程)来运行远程过程的方式。所有其他都与您的应用程序逻辑有关(何时调用该过程,该过程应该如何处理收到的数据等)。
    • 哦,非常感谢。,我已经通过使用您的回答完成了我的要求:)
    • 当我尝试调用我自己的连接 ID 时,这失败了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 2015-07-09
    相关资源
    最近更新 更多