是否可以在浏览器中与信号器建立多个服务器连接?

时间:2018-01-04 09:40:45

标签: javascript asp.net signalr

问题

我使用signalr在我的应用程序中执行常规操作,现在我还需要连接到另一个域上的另一个集线器......这可能吗?

具体来说,我需要能够有两个不同的连接,同时打开两个不同的URL。

详情

想象一下,我正在运行我的网络应用程序@ https://example.com,在该应用程序中,我有一些应用程序可以使用的集线器。 在这一点上,一切都是标准的信号器,你可能会在微软的框架中看到自己的入门指南。

沿着现实世界"现在,我需要在托管@ https://api.example.com的同一个网络应用中的网页上运行的javascript代码中连接到@ https://example.com中心。

这可能吗? 这是一个好主意吗? 我应该做些什么吗?

文档似乎暗示但从未明确声明信号器只能用于连接页面来自的应用程序。

技术位

这些脚本已经在我的页面上并回到主应用程序......

<script src="~/scripts/jquery.signalR-2.2.1.min.js"></script>
<script src="~/signalr/hubs"></script>

我尝试添加这个......

<script src="https://api.example.com/signalr/hubs"></script>

然后开始编写初始化代码,但意识到$.connection对我来说有点不为人知,但我认为在另一端总是引用https://example.com

我需要的是第二个连接到api域但是如何?

1 个答案:

答案 0 :(得分:2)

您可以连接到页面外的集线器。这甚至在SignalR Docs中陈述并示例。作为预防措施,服务器必须启用CORS,否则会在JS中抛出CORS错误。

要在客户端开始使用多个连接,您可以在以下行中执行以下操作:

var connection = $.hubConnection("http://www.api.endpoint.com");
var apiHub = connection.createHubProxy('apiHub');

apiHub.client.foo = function() { // event function };

connection.start();

作为预警(另一个),Chrome有(我相信)5个并发连接的限制,这在浏览器之间有所不同。因此,如果您同时打开大量请求,最终其中一些可能会失败。编辑:我怀疑这适用于同一来源的同时连接。

SignalR Documentation - How to establish a connection (That I used for example)