【问题标题】:signalr scaleout sending message to only particular client信号器横向扩展仅向特定客户端发送消息
【发布时间】:2014-08-10 21:48:10
【问题描述】:

当我浏览具有背板的信号器横向扩展选项的文档时,我看到背板的工作是将消息从一台服务器发送到所有信号器服务器。如果是这样,如果服务器 1 想要向特定客户端发送消息,则消息将进入背板并从那里发送到所有其他服务器(例如服务器 2,3)......客户端 1 与服务器 1 连接的位置。所以我们可以限制这仅从服务器 1 发送到客户端 1。另一个问题是,连接、重新连接等事件是否也会被路由到背板和所有其他服务器?

谢谢

【问题讨论】:

    标签: signalr scale


    【解决方案1】:

    如果您使用 SignalR 背板,所有消息都将发送到所有服务器。无法将 SignalR 横向扩展提供程序配置为仅将消息发送到特定服务器。要么全有,要么全无。

    如果您选择放弃背板,您当然可以将 SignalR 配置为使用其默认的内存消息存储,然后手动发送服务器间消息。

    connected/reconnected/disconnected 等事件不涉及发布消息,因此不会将任何消息路由到所有其他服务器。

    【讨论】:

    • 您好,感谢您的快速信息。但是我们的问题是我们有两台启用了负载平衡器的服务器,一些客户端将与服务器 1 通信,而一些客户端将与服务器 2 通信,因此背板是唯一的选项 rt ??。但是我们没有要求将消息发布给所有客户端,而只发布给特定客户端。所以背板的问题是消息一旦你广播给客户端,它就会发送到所有服务器rt。在这种情况下,每个服务器都应该识别该客户端是否与自己连接(使用客户端ID来检查)并将消息发送给那个客户。
    • SignalR 背板不支持直接的服务器到服务器消息传递。即使他们这样做了,也会很棘手,因为客户端可以重新连接到另一台服务器并请求他们错过的消息。对于许多应用来说,背板并不是瓶颈。从背板检索不需要发送到客户端的消息不需要太多处理。如果您的应用程序将所有消息发送到所有服务器的成本太高,那么您将不得不自己寻找一种方法来发送服务器间消息,这样您就可以避免使用背板。
    • 您好,只有在背板(rabbitmq)上有一个基本问题,实际上服务总线何时收到要发送到所有服务器的消息?只有当我们调用 Clients.All.X() 方法时?它会去所有的服务器?前任。如果我们通过负载平衡拥有服务器 1 和服务器 2,则两个服务器都有一个名为 SendMessage() 的方法,并且该方法具有调用 Clients.All 或 Clients.Client(dictionary[to]).X() 的代码。那么当我们调用Server1::SendMessage()的时候,那么Server2的SendMessage()方法什么时候会被调用呢?是不是每当调用 Clients.All 或 Clients.Specfic 方法时,所有服务器都会调用该方法?
    猜你喜欢
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2012-05-24
    • 2015-08-06
    • 1970-01-01
    • 2018-12-05
    相关资源
    最近更新 更多