我有一个现有的服务,在事件发生时通知大量客户端 . 它使用了我自己推出的长轮询机制 . 我正在探索用信号器集线器替换该机制,并使原型工作 . 但它有一个相当显着的低效率,感觉应该有一个解决方案,但我找不到它 .
我理解信号器中组的想法,组显然是为了防止这种低效率,但有一个原因是我不能使用组 . 我希望说我需要在使用每个客户端的ConnectionId的许多客户端上使用相同的参数值调用相同的客户端方法 . 我可以在必要的时候解释原因,但它确实是不合时宜的 .
假设我有一个200个ConnectionId的列表,我需要在它们每个传递相同的对象参数时调用相同的方法 . 如果我简单地遍历ConnectionId调用Clients.Client(ConnectionId).clientMethod(param),我假设param对象将被序列化200次 .
有没有办法将参数序列化一次,然后使用已经序列化的参数调用客户端方法?
UPDATE
我在Allow to Send Json Strings without duplicate Serialization找到了一个与github相关的问题(甚至可能是这个问题) . 似乎功能已添加到signalr,但github问题在信号器文档中没有找到任何关于它的信息 .
更新2
在上面引用的github问题中,新功能仅针对PersistentConnection实现 - 而不是集线器 . 对于持久连接,当发送ArraySegment类型的参数时,signalr假定它是预序列化的并按原样发送它而不对其进行序列化 .
出于某种原因,这没有针对集线器实现,尽管它对集线器有用,原因与持久连接有用的原因相同 .
1 回答
将所有connectionId存储在
Static List<string> at
OnConnected`事件中并使用以下内容,