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>
ハブを使用している場合は、ハブの接続を停止できます。
$.connection.hub.stop();
まず、それが必要だと確信していますか?明らかに通信エラーが発生した場合は、再試行します。
ただし、ソースコードを調べたところ、特にエラーハンドラーでは、.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";
});