【发布时间】:2016-06-16 02:12:47
【问题描述】:
我有一个现有的服务,可以在事件发生时通知大量客户。它使用我自己滚动的长轮询机制。我正在探索用信号器集线器替换该机制,并有一个原型工作。但它的效率非常低,感觉应该有解决方案,但我没有找到它。
我理解 signalr 中的组的概念,组显然是为了防止这种低效率,但我不能使用组是有原因的。我希望我需要在使用每个客户端的 ConnectionId 的许多客户端上调用具有相同参数值的相同客户端方法就足够了。如有必要,我可以解释原因,但这真的离题了。
假设我有一个包含 200 个 ConnectionId 的列表,并且我需要对它们中的每一个调用相同的方法,并传递相同的对象参数。如果我简单地遍历 ConnectionId 的调用 Clients.Client(ConnectionId).clientMethod(param),我假设 param 对象将被序列化 200 次。
有没有办法将参数序列化一次,然后使用已经序列化的参数调用客户端方法?
更新
我在Allow to Send Json Strings without duplicate Serialization 发现了一个听起来相关的 github 问题(甚至可能是这个确切的问题)。似乎该功能已添加到 signalr,但 github 问题没有说明如何执行此操作,我在 signalr 文档中找不到任何相关内容。
更新 2
在上面提到的 github 问题中,新功能仅针对 PersistentConnection 实现,而不是集线器。对于持久连接,当发送 ArraySegment 类型的参数时,signalr 假定它已预先序列化并按原样发送而不对其进行序列化。
出于某种原因,这并没有针对集线器实现,尽管它对集线器很有用,原因与它对持久连接有用的原因相同。
【问题讨论】:
标签: signalr signalr-hub