如果我有多个页面可以使用多个中心类,那么管理它的最佳方法是什么?
例如:
导航到网站中的另一个页面并基本上“重新打开”与上一页上打开的同一集线器类的连接是否很糟糕?
我是否认为在一个页面上打开多个集线器连接是正确的,因为它们都统一在一个连接中,即使它们是不同的集线器类?
您可以让多个集线器在您的站点上共享一个连接。SignalR 2.0 已更新为通过一个信号连接处理多个集线器,而不会损失性能。
官方文档:http ://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server#multiplehubs
所有客户端将使用相同的 URL 与您的服务建立 SignalR 连接(“/signalr”或您的自定义 URL,如果您指定了一个),并且该连接用于该服务定义的所有集线器。
与在单个类中定义所有 Hub 功能相比,多个 Hub 没有性能差异。
要从 Hubs 开始,请阅读WIKI 条目中的 Hubs and Client Side of Hubs。根据多个页面的上下文,有几件事。
例子:
你有一个页面,它有两个部分,一个显示实时用户活动的图表和一个以表格形式查看用户所做的实时数据更改的区域。你会创建两个集线器或两个组还是什么?还有其他页面使用相同的图表和数据表。
我的解决方案:
当您在页面之间切换时,客户端将连接到同一个集线器并请求 getGraph 或 getDataTable 或两者并用相关数据填充其客户端。同样,在服务器上,当数据更改时,您可以调用客户端方法来更新所有客户端或一组客户端(让我们增加这种复杂性)
假设您有学生和老师查看您的申请。它们需要不同级别的数据访问。您可以使用组在集线器上将它们分开,这样您就不会将教师信息发送给学生,也不会将学生数据发送给教师。
回到您的“是否不好”和“还可以”的问题,如果没有实际应用的上下文,这很难确定。我想不出一个场景,你可以证明除Performance之外的多个集线器是合理的。
不幸的是,这在 SignalR 的新“核心”版本中不再可能了
https://github.com/aspnet/SignalR/issues/456
https://github.com/aspnet/SignalR/issues/955
在 iOS 上,每台服务器的连接数限制为四个。
现在 websockets 没有这个限制(我认为可能是 32 但不确定)。但是,我使用的是自签名证书,该证书在 Safari 中存在各种问题 - 所以它实际上下降到长轮询(并且这样做并不明显)。
所以我最终得到了这些联系: