web-dev-qa-db-ja.com

SignalRでポーリングを停止するにはどうすればよいですか?

SignalRでサーバーのポーリングを停止する方法はありますか?エラーが発生した場合、サーバーのポーリングを停止したい。ハブのポーリングは$.connection.hub.start()で開始されるため、$.connection.hub.stop()などで停止できると思いました。しかし、それは機能していないようです。stop()を呼び出した後もポーリングは続行されます。ポーリングを停止する別の方法はありますか?

<script type="text/javascript">

 var chatHub = $.connection.chatHub;
 var connection = $.connection.hub;

chatHub.addMessage = function (message) {
      $('#messages').append('<li>' + message + '</li>');
    };

connection.error(function (error) {
 $('#messages').append('<li>' + "error connecting: closing connnection" + '</li>');
    connection.stop(); //This doesn't seem to work   
        });

connection.start();

</script>
17
nivkovic

ハブを使用している場合は、ハブの接続を停止できます。

$.connection.hub.stop();
40
davidfowl

まず、それが必要だと確信していますか?明らかに通信エラーが発生した場合は、再試行します。

ただし、ソースコードを調べたところ、特にエラーハンドラーでは、.stop()コマンドを呼び出すことができないということです。ハンドラー機能が終了した後、2秒後に通信が自動的に再初期化されるため、それぞれ効果はありません。

Jquery.signalR.js(340行目)を参照してください。

$(instance).trigger("onError", [data]);

window.setTimeout(function () {
  poll(instance);
}, 2 * 1000);

私は1つの回避策を見つけました:ハンドラー関数で例外をスローします。これにより、ポーリングが再初期化されません。

connection.error(function (error) { //$.connection.hub.error()
  $('#messages').append('<li>' + "error connecting: closing connnection" + '</li>');
  throw "Close SignalR connection";
});
2
Michal