【问题标题】:Use signalr to notify all clients except self使用 signalr 通知除 self 之外的所有客户端
【发布时间】:2016-07-28 20:05:11
【问题描述】:

我使用 Signalr 2.2 通过 Hub 向 javascript 客户端发送通知。客户端向我的 REST Web api (c#) 发出 HTTP 请求,我的服务器使用 Signlar Hub 将更新推送到客户端。

我知道有一种方法可以管理向其发送通知的客户端,但目前我总是使用:~clients.all~。我不知道如何知道每个连接的 Id,我应该将这些 Id 保存在哪里以及如何使用它们?

我在较早的帖子中看到 ~clients.Others~ 可以使用,但这似乎与 Signalr 的旧 api 有关

谢谢

【问题讨论】:

    标签: c# asp.net-web-api signalr signalr-hub


    【解决方案1】:

    这会起作用-

    Clients.AllExcept(Context.ConnectionId).hello(message);
    

    【讨论】:

    • 我没有可用的 Context 类,是在不同的命名空间中还是什么?
    【解决方案2】:

    您可以将连接信息存储在 Hub 类的静态字典中。这是示例代码

            private static readonly ConcurrentDictionary<string, string> _connections = new ConcurrentDictionary<string, string>();
    
            public void SayHello(string message)
            {
                Clients.Others.hello(message);
            }
    
            public override System.Threading.Tasks.Task OnConnected()
            {
                _connections.TryAdd(Context.ConnectionId, string.Empty);
                return base.OnConnected();
            }
            public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled)
            {
                string value;
                _connections.TryRemove(Context.ConnectionId, out value);
                return base.OnDisconnected(stopCalled);
            }
    

    【讨论】:

    • 什么是 Clients.Others 属性?我没有那个
    • 您使用的是哪个版本的 Signalr?这是 Hub API 调用指南asp.net/signalr/overview/guide-to-the-api/…
    • 我使用最新的 2.2 .. 还有一个问题是如何在 Http 请求之后判断哪个客户端发出了请求?我了解在创建连接时如何获取客户端 ID,但稍后我该如何使用它们?
    • 在您的情况下,您需要将 connectionId 作为输入传递给您的 REST API 调用,然后在服务器端使用它。您可以使用 $.connection.hub.start() .done(function(){ console.log('Now connected, connection ID=' + $.connection.hub.id); }) .fail 之类的代码访问连接 ID (function(){ console.log('无法连接!'); }); });
    • 有没有一种方法可以在不将其添加到每个请求的情况下实现连接 ID?这将导致大量代码更改。有没有办法将其放入缓存或 cookie 中并放入我的控制器中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    相关资源
    最近更新 更多