如何在SignalR中停止轮询?

时间:2011-11-29 13:56:18

标签: 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>

2 个答案:

答案 0 :(得分:40)

如果您正在使用集线器,则可以停止集线器的连接:

$.connection.hub.stop();

答案 1 :(得分:2)

首先你确定有必要吗?如果发生通信错误,显然你想重试它。

但是,我查看了源代码,我的意思是特别是在错误处理程序中,不可能调用.stop()命令。它分别没有效果,因为处理器功能完成后通信会在两秒后自动重新初始化。

见jquery.signalR.js(第340行):

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

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

我找到了一个解决方法:在处理函数中抛出一个异常,导致该轮询没有重新初始化:

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