我有多个 SignalR '服务' 正在运行,只有一个 UI 可以访问它们。
如何使客户端 js 与具有不同 Url 的多个连接进行通信?因为似乎我只能为每个 $.connection.hub 指定一个 url,而且我不能使用多个“signalr/hubs”客户端脚本。
有什么帮助吗?谢谢。
我有多个 SignalR '服务' 正在运行,只有一个 UI 可以访问它们。
如何使客户端 js 与具有不同 Url 的多个连接进行通信?因为似乎我只能为每个 $.connection.hub 指定一个 url,而且我不能使用多个“signalr/hubs”客户端脚本。
有什么帮助吗?谢谢。
$.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();
我对这种情况的解决方案:
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();
});