SignalR在具有打开连接的特定服务器上运行。如果我们需要启动另一台服务器,则将原来的信号取下来,SignalR会自动与新服务器重新连接并像第一台服务器那样开始运行吗?
答案 0 :(得分:0)
您可以这样做。所以我假设您有2台Signalr服务器正在运行,因此我将为这种情况定义2台连接
var connection1 = new signalR.HubConnectionBuilder()
.withUrl('/server1')
.build();
var connection2 = new signalR.HubConnectionBuilder()
.withUrl('/server2')
//.configureLogging(signalR.LogLevel.Trace)
.build();
然后我将定义2种连接启动方法
function startServer1() {
connection.start().catch(function (err) {
});
}
function startServer2() {
connection2.start().catch(function (err) {
});
}
connection.onclose(function () {
startServer2();
});
因此,当您的连接关闭时,您可以重新连接第二台服务器
答案 1 :(得分:0)
我们遇到了类似的问题,我们发现SignalR不会自动与新服务器重新连接。我们的解决方案是不使用生成的代理。我们使用了一个中间端点,其工作是提供要使用的当前URL。要连接到SignalR,我们的流程将调用端点获取该结果,然后使用该结果连接到该SignalR的服务器,然后在SignalR连接关闭或丢失时再次像第一次一样重复该过程。
async function reconnect(connection){
const signalRUrl = await request('<<our intermediary url>>');
connection.hub.url = signalRUrl;
connection.start();
}
var connection = $.hubConnection();
var hubProxy = connection.createHubProxy('yourHub');
hubProxy.on('message',function(){});
await reconnect(connection);
connection.onClose(function () {
reconnect(connection);
});