有没有办法在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>
答案 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";
});