SignalR如何避免连接两次

时间:2016-12-29 19:20:58

标签: jquery signalr signalr-hub

在我的应用程序登录后,我重定向到主页,我有以下脚本:

// Defining a connection to the server hub.
        var myHub = $.connection.myHub;
        // Setting logging to true so that we can see whats happening in the browser console log. [OPTIONAL]
        $.connection.hub.logging = true;
        // Start the hub
        $.connection.hub.start();

        myHub.client.newMessageReceived = function (message) {
            alert(message);
        }

在我的Hub.cs服务器中,我有:

public override Task OnConnected()
        {
            var connectionId = Context.ConnectionId;

            // here do other stuff...

            return base.OnConnected();
        }

我第一次进入主页时,我可以看到我得到connectionId但是如果我再次重新加载页面,我会得到一个不同的页面,因为jquery脚本它正在发生#39}再次被召唤。

  

我如何在我的客户端中检测到我是否已连接,因此每次刷新该页面时我都不start()集线器?

1 个答案:

答案 0 :(得分:2)

我有一个类似的场景,重定向触发了另一个连接到SignalR的请求-我通过检查connection.state并过滤掉请求(除非连接处于Disconnected状态)来解决。我使用的是angular + rxjs,但希望类似的原理仍然适用:

在中心服务中

this.connection = new HubConnectionBuilder()
      .withUrl(`${environment.apiUrl}/hubRoute`)
      .configureLogging(LogLevel.Warning)
      .build();

然后在请求中连接到SignalR

filter(() => this.hubService.connection.state === HubConnectionState.Disconnected)
// safe to call hubService.connection.start();

希望可以帮助其他人绊倒同一件事!