32

signalR 関数を含む複数の JavaScript ブロックがあります。

実行順序がわからないので、ハブを起動したい

$.connection.hub.start();

まだ開始されていない場合。

ハブが既に開始されているかどうかを確認するにはどうすればよいですか? 何度も起動するとエラーになります。

4

3 に答える 3

83

この問題にアプローチするには、いくつかの方法があります。1 つ目は、接続コールバック イベントで設定する独自の接続ステータス トラッキング変数を作成することです。

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

接続を開始する前に ConnectionStarted を確認できます。残念ながら、これはうまく機能しません。start() は非同期であり、接続が終了する前に多くのインスタンスが接続を開始しようとし、ConnectionStart を true に設定する可能性があるためです。

だから、実用的なソリューション。二つあります。まず、すべてのインスタンスが独自の接続オブジェクトを使用するようにします (つまり、デフォルトの $.connection.hub を使用せずに、手動の接続クリエーターを使用します:

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

ほとんどのブラウザーではページごとに許可される接続数が制限されているため、これはあまり好ましくありません。

IMO、最善の解決策は、デフォルト プロキシ ($.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 状態になることに注意してください。start が呼び出されると、接続は $.connection.hub.stop() が呼び出されるまで (中断された場合) 常に再接続を試みます (その後、「切断」状態に戻ります)。

参照:

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

于 2013-06-03T20:43:57.243 に答える
6

次のような各関数で接続状態を確認できます。

function doSomething {
        if ($.connection.hub.state === $.signalR.connectionState.disconnected) {
            $.connection.hub.start().done(function () { myHub.server.myHubMethod(); });
        }
        else {
            myHub.server.myHubMethod();
        }
    }
于 2016-09-30T11:19:31.950 に答える
5

.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!");
                 });
于 2013-02-25T12:17:49.957 に答える