SignalR和交换服务器以及连接丢失

时间:2019-04-27 02:39:51

标签: signalr

SignalR在具有打开连接的特定服务器上运行。如果我们需要启动另一台服务器,则将原来的信号取下来,SignalR会自动与新服务器重新连接并像第一台服务器那样开始运行吗?

2 个答案:

答案 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);
});

相关问题