18

有什么方法可以停止 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>
4

2 回答 2

41

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

$.connection.hub.stop();
于 2012-04-09T05:20:29.497 回答
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";
});
于 2011-11-29T23:03:26.210 回答