Signalr检查中心已经开始(Signalr check if hub already start

2019-07-20 12:11发布

我有signalR功能的多个JavaScript块。

我不知道执行的顺序,这样我想先从枢纽

$.connection.hub.start();

如果它尚未启动。

我怎么能检查集线器已经启动? 多次启动它,它会抛出一个错误。

Answer 1:

有几种方法可以解决这个问题。 首先是要创建自己的连接状态跟踪变量,您与连接回调事件设置:

$.connection.hub.start().done(function() { ConnectionStarted = true; })

您可以尝试启动连接前检查ConnectionStarted。 不幸的是,这不会很好地工作,为的start()是异步的,这么多的情况下,可以尝试一个完成之前启动一个连接,并设置ConnectionStart为true。

所以,工作的解决方案。 那里有两个。 首先,有每个实例使用其自己的连接对象(即:不使用默认的$ .connection.hub,而是使用手动连接的创造者:

var localConnection = $.hubConnection(); 
var localHubProxy= localConnection.createHubProxy('HubNameHere');

这是不是很大,因为大多数浏览器都每页允许的连接数量有限,而且还因为它一般是矫枉过正。

国际海事组织,最好的解决办法是使用具有默认代理($ .connection.hub)单自动连接,并期待在连接状态(这是我刚刚碰到)。 每个连接对象都有一个状态:

$.signalR.connectionState
Object {connecting: 0, connected: 1, reconnecting: 2, disconnected: 4}

因此,在每一种情况下,去这样的事情?:

if ($.connection.hub && $.connection.hub.state === $.signalR.connectionState.disconnected) {
  $.connection.hub.start()
}

还要注意的是,当你创建一个连接,它将在状态“断开连接” / 4,直到开始坐在叫做就可以了。 一旦开始被调用时,连接显然将尝试重新连接不断的(如果它被中断),直到$ .connection.hub.stop()被调用(会再回去状态“断开”)。

参考文献:

http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#establishconnection https://github.com/SignalR/SignalR/wiki



Answer 2:

当轮毂已经使用.done开始,你可以检测到()

$.connection.hub.start().done(function () {
});

使用这种方法,你可以做以下(从文档摘自: https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client-Hubs ),那么你可以跟踪如果连接是打开自己。

function connectionReady() {
    alert("Done calling first hub serverside-function");
};

$.connection.hub.start()
                .done(function() {
                    myHub.server.SomeFunction(SomeParam) //e.g. a login or init
                         .done(connectionReady); 
                })
                .fail(function() {
                    alert("Could not Connect!");
                 });


Answer 3:

您可以检查您的每一个功能,如连接状态:

function doSomething {
        if ($.connection.hub.state === $.signalR.connectionState.disconnected) {
            $.connection.hub.start().done(function () { myHub.server.myHubMethod(); });
        }
        else {
            myHub.server.myHubMethod();
        }
    }


文章来源: Signalr check if hub already started