将客户端连接到SignalR集线器的最佳做法是什么?在客户端,最好是在某处保持连接(集线器代理),还是为每个集线器方法调用创建连接(集线器代理)更好?
答案 0 :(得分:3)
每https://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#multiplehubs
与多个集线器相比,多个集线器没有性能差异 在单个类中定义所有Hub功能。
您是否使用多个集线器只是决定您希望如何以逻辑方式组织代码。标准OOP实践适用于此处。
后来在同一份文件......
如果需要在长期存在的对象中多次使用上下文, 得到一次参考并保存它而不是每次都得到它 时间。获取上下文一次可确保SignalR向其发送消息 客户端与Hub方法构成客户端的顺序相同 方法调用。有关如何使用SignalR的教程 集线器的上下文,请参阅使用ASP.NET SignalR的服务器广播。
...不确定最后一位是否与您要求的内容相关,但在规划信号架构时,最好知道。
答案 1 :(得分:1)
最佳方法是为所有方法调用保留一个连接。您打开的每个新连接都将浪费网络资源和处理,因为SignalR需要与每个连接的服务器保持实时连接。这意味着移动设备上的电池耗尽和更多的服
<强> [UPDATE] 强>
在阅读@ alex-dresko回答后,我意识到我的回答需要一些澄清。 无论您在同一连接下创建多少个代理,它都不会改变性能:
hubConnection = new HubConnection(BASE_ADDRESS);
var chatProxy = hubConnection.CreateHubProxy("chatHub");
var otherProxy = hubConnection.CreateHubProxy("otherHub");
var nProxy = hubConnection.CreateHubProxy("nHub");
但是,你问是否
最好将连接(集线器代理)保持在某个地方
嗯,连接是一回事(HubConnection
)而代理是另一回事。
新连接将在客户端和服务器之间打开一个新的桥梁,因此在应用程序中全局创建和保持单个连接是有意义的。然后,您可以重用相同的连接来创建任意数量的代理。
您可以轻松测试此方案。创建一个控制台应用程序,用于创建连接和2个代理集线器。然后在每个连接上创建2个连接和1个集线器,并检查信号器日志......