SignalR Hub:在多个客户端上使用相同的参数调用相同的方法

SignalR Hub:在多个客户端上使用相同的参数调用相同的方法

问题描述:

我有一个现有的服务,在事件发生时通知大量的客户端。它使用我自己翻阅的长轮询机制。我正在探索用信号集线器替换这个机制,并且有一个原型工作。但它有一个非常显着的低效率,觉得应该有解决方案,但我没有找到它。SignalR Hub:在多个客户端上使用相同的参数调用相同的方法

我明白信号组中的组的想法,而组显然是为了防止这种低效,但有一个原因,我不能使用组。我希望足以说我需要在使用每个客户端的ConnectionId的许多客户端上调用具有相同参数值的相同客户端方法。如果有必要,我可以解释一下为什么,但这确实在旁边。

假设我有一个200个ConnectionId的列表,我需要调用相同的方法,每个人传递相同的对象参数。如果我只是遍历ConnectionId的调用Clients.Client(ConnectionId).clientMethod(param),我认为param对象将被序列化200次。

有没有一种方法来序列化一个或多个参数一次,然后调用客户端方法使用已经序列化的参数?

UPDATE

我在Allow to Send Json Strings without duplicate Serialization发现声音相关的一个问题GitHub的(甚至这个确切的问题)。看来这个功能被添加到了signalr中,但是github的问题并没有说明如何去做,我在signalr文档中找不到任何关于它的信息。没有集线器 -

更新2

在上面提到的github上的问题,新的功能是为PersistentConnection只执行。通过持久连接,当发送一个ArraySegment类型的参数时,signalr会假定它是预先序列化的,并且按原样发送它而不序列化它。

由于某些原因,这不是针对集线器实现的,尽管它对于集线器有用,因为它对于持久连接有用。

存储所有的ConnectionId在一个Static List<string> at OnConnected`事件并使用下面,

Static List<string> allconnections = new List<string>(); 
    public override Task OnConnected() 
     { 
      allconnections.Add(Context.ConnectionId); 
      return base.OnConnected(); 
     } 

Public void YourServerMethod(params) 
{ 
    Clients.Clients(allConnections).clientMethod(params) 
}