问题
我正在使用 signalr 在我的应用程序中执行常规操作,现在我也需要附加到另一个域上的另一个集线器...这可能吗?
具体来说,我需要能够同时打开两个单独的连接,连接到两个不同的 URL。
详细信息
想象一下我正在运行我的网络应用程序@https://example.com在该应用程序中,我有一些应用程序可以使用的中心。 此时一切都是标准信号器,正如您可能在 Microsoft 自己的框架入门指南中看到的那样。
“现实世界”来了,现在我需要连接到集线器@https://api.example.com在托管 @ https://example.com 的同一 Web 应用程序的页面上运行的 javascript 代码中.
这可能吗? 这是一个好主意吗? 我应该做点别的吗?
文档似乎暗示但从未明确指出信号器只能用于连接到页面来源的应用程序。
技术部分
这些脚本已经在我的页面上并与主应用程序对话......
<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 域,但是如何连接?
最佳答案
您可以连接到页面外部的中心。这甚至在 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)
关于javascript - 是否可以在浏览器中与信号器建立多个服务器连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48092454/