SignalR连接(集线器代理)生命周期

时间:2016-10-27 07:22:29

标签: connection signalr signalr-hub signalr.client

将客户端连接到SignalR集线器的最佳做法是什么?在客户端,最好是在某处保持连接(集线器代理),还是为每个集线器方法调用创建连接(集线器代理)更好?

2 个答案:

答案 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个集线器,并检查信号器日志......