具有多个连接的SignalR客户端

问题描述 投票:16回答:2

我正在运行多个SignalR'服务',并且只有一个UI可以访问它们。

我如何使客户端js与具有不同网址的多个连接对话?因为似乎我每个$ .connection.hub只能指定一个网址,所以不能使用多个“ signalr / hubs”客户端脚本。

有帮助吗?谢谢。

jquery asp.net-mvc signalr signalr-hub
2个回答
24
投票

$。connection.hub在/ signalr / hubs包含物中创建。

在文件末尾,它实际上是这样做的:

$.connection.hub = $.hubConnection("/signalr", { useDefaultPath: false });

要创建中心代理,请执行以下操作:

var myHub = $.connection.hub.createHubProxy('myHub');

多个连接的简单示例:

var connection1 = $.hubConnection("http://www.myfirstendpoint.com");
var connection2 = $.hubConnection("http://www.mysecondendpoint.com");

var myCon1Hub = connection1.createHubProxy('myCon1Hub');
var myCon2Hub = connection2.createHubProxy('myCon2Hub');

myCon1Hub.client.foo = function() { ... Whatever you want ... };
myCon2Hub.client.foo = function() { ... Whatever you want ... };

connection1.start();
connection2.start();

6
投票

我在这种情况下的解决方案:

var SignalRHelpers = function () {
  var _connectionDeferred;

  var subscribeToConnectionStart = function (callback) {
    if (!_connectionDeferred)   // start connection if not yet initialized
        _connectionDeferred = $.connection.hub.start();

    if ($.connection.hub.state == $.connection.connectionState.connected && callback) {
        // already connected
        callback();
    } else if (callback) {
        // register handler
        _connectionDeferred.done(callback);
    }
  };

  return {
    SubscribeToConnectionStart: subscribeToConnectionStart
  };
}();

它在内部存储来自start()的promise对象,并根据需要附加处理程序。

基本上,每次需要连接时,您只需调用SignalRHelpers.SubscribeToConnectionStart。例如

SignalRHelpers.SubscribeToConnectionStart(function(){
    someHub.server.executeSomething();
});
© www.soinside.com 2019 - 2024. All rights reserved.