如果我有一个可以使用多个集线器类多页,什么是管理最好的方法?
例如:
它是坏的导航到另一个页面的网站,基本上是“重新打开”到同一个集线器类是以前的页面上打开的连接?
我在想,一个页面上打开多个集线器连接,是可以的,因为它们是在一个连接的所有统一纠正,即使它们是不同的轮毂类?
如果我有一个可以使用多个集线器类多页,什么是管理最好的方法?
例如:
它是坏的导航到另一个页面的网站,基本上是“重新打开”到同一个集线器类是以前的页面上打开的连接?
我在想,一个页面上打开多个集线器连接,是可以的,因为它们是在一个连接的所有统一纠正,即使它们是不同的轮毂类?
你可以有多个集线器共享网站上的一个连接。 SignalR 2.0更新了,没有在性能上少了一个signlar连接来处理多个集线器。
官方文档: http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server#multiplehubs
所有客户端都将使用相同的URL(如果指定了一个“/ signalr”或您的自定义URL)以建立与服务SignalR连接,并连接用于由服务定义的所有集线器。
有多个集线器没有性能上的差异相比,在一个类中定义的所有集线器功能 。
要开始使用集线器进行阅读的集线器WIKI进入和枢纽进行客户端 。 有根据多个页面的情况下几件事情。
例:
你有一个页面,有两个部分,这显示实时用户活动和一个区域来查看用户做一个表的实时数据变化的曲线图。 您将创建两个集线器或两组还是什么? 存在使用相同的图形和数据表的其他页面。
我的解决方案:
当你的页面之间切换客户端将与相同的轮毂和要求getGraph或getDataTable或两者连接,并与相关的数据填充其客户。 同样在服务器数据改变时,你可以调用客户端的方法来更新所有客户端或他们的组 (让我们添加了这种复杂性)
假设你有学生和老师在看你的应用程序。 它们需要不同级别的数据访问。 您可以使用组来让他们分开在轮毂上,这样你就不会送教师对学生和学生数据,以教师信息。
回到你的问题,“这样做不好”和“是确定”这是很难确定没有实际应用的上下文。 我不能想象这样一个场景,你可以开证明多个中心的性能 。
不幸的是这不再是不可能在新的“核心”版本SignalR的
https://github.com/aspnet/SignalR/issues/456
https://github.com/aspnet/SignalR/issues/955
在iOS上有每台服务器的四个连接的限制。
现在没有这个限制的WebSockets(我认为这可能是32,但不知道)。 但是我使用的是自签名证书,有各种各样的问题,在Safari中-因此它实际上下降到长轮询(并且不是很明显它这样做)。
所以我结束了这些连接:
所以,如果我只有三个枢纽整个Safari浏览器页面会锁定一个蓝条。 即使网络API调用得到阻止。
注意:使用HTTP / 2 这个限制没有了 ,但你可能会更好过,特别是如果你使用热重载自己局限于一个枢纽 。 加上发展建立HTTP / 2未必是简单的任务。
首先(临时)设置你的集线器只能接受WebSockets的。 这会给你在Safari中的错误(使被抓住并警告对话框中显示一定的误差)。
routes.MapHub<SignalRHub>("/rt", options =>
{
// when run in debug mode only WebSockets are allowed
if (Debugger.IsAttached) {
options.Transports = Microsoft.AspNetCore.Http.Connections.HttpTransportType.WebSockets;
}
});
现在,你就可以确认修复 - 在调试模式下运行,或删除的“如果”。
与iOS的问题是,即使你接受HTTPS流量自签名证书 - 并在浏览器中得到一个可爱的小“锁”符号 - 它并不适用于WSS:协议。 所以连接不能升级到WSS,这就是为什么他们在4 MAX块。
如果你能得到的一切到一个集线器,它只是更容易:-)
我还意识到,多个集线器复杂重新连接逻辑如果连接丢失。 一个集线器只是让这更容易。 如果你不小心,你最终会显示3个对话框说“失去的连接。 重试?' 我切换到一个单一的枢纽正因为如此。
虽然我讨厌一切混合,部分类帮助,我个人没有太多SignalR方法反正。
这只是为了调试相关的,并假定您使用的是HTTPS证书,你自签名。
改用类似letsencrypt - 或CloudFlare的ARGO隧道得到一个公开可信的证书。 这将通过Safari浏览器可以完全信任,所以你的连接将获得升级到真正的网络套接字。
创建自签名的根证书(CA),然后生成一个与它的域名的SSL证书。
这比我想象的复杂。 最终事实证明我是缺少Subject Type=CA
在我的根证书- iOS系统要求。 如果没有这个“延伸”,它会安装根证书作为配置文件,但不会让你选择它的SSL。
一旦你的根证书安装Safari浏览器将使用WebSockets工作得很好。
只使用HTTP。 这是不是一种选择,对我来说,因为我使用某些API,如Facebook /谷歌/付款,他们需要HTTPS。
最好使用一个集线器摆在首位。 而且最好能得到正确安装证书等等,iOS将使用WebSockets工作。
如何创建和无需用户交互安装在Windows 10 X.509自签名的证书?