2011-11-29 131 views
15

有什么办法停止在SignalR中的轮询服务器?如果发生错误,我想停止轮询服务器。轮询中心开始于$.connection.hub.start(),所以我认为它可以停止$.connection.hub.stop()或类似的东西。但它似乎并不奏效,即使拨打stop()后,投票仍然继续。有没有另一种方法来停止查询?如何在SignalR中停止轮询?

<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> 

回答

37

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

$.connection.hub.stop(); 
+0

将该语法更改为$ .connection.hub.connection.stop( )?这对我来说很有用。 – dove

+0

不,它没有。这并没有改变 – davidfowl

+0

显然我混在一起,很抱歉浪费你的时间,现在是时候阅读关于停止特定集线器上的连接$ .connection.myHub.stop()和以上之间的区别。有一个想法,但我认为我会设置一个沙箱,所以我知道。 – dove

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"; 
});