2011-11-29 19 views
15

¿Hay alguna forma de detener el servidor de sondeo en SignalR? Quiero detener el servidor de sondeo si ocurre un error. Los centros de sondeo se inician con $.connection.hub.start(), por lo que asumí que podría detenerse con $.connection.hub.stop() o algo así. Pero parece que no funciona, las encuestas continúan incluso después de llamar al stop(). ¿Hay alguna otra manera de detener el polling?¿Cómo detener el sondeo en 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> 

Respuesta

37

Si está utilizando concentradores puede detener la conexión del concentrador:

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

tiene esa sintaxis cambiada a $ .connection.hub.connection.stop ()? Eso es todo lo que funciona para mí. – dove

+0

No, no tiene. Eso no ha cambiado – davidfowl

+0

obviamente mi confusión, perdón por perder su tiempo, ahora es tiempo de que lea sobre la diferencia entre detener una conexión en un hub particular, $ .connection.myHub.stop(), y más. Tengo una idea de qué, pero creo que voy a configurar un arenero, así lo sé. – dove

2

¿En primer lugar está seguro de que es necesario? Si se produce un error de comunicación, obviamente quiere volver a intentarlo.

Sin embargo, miré en el código fuente y quiero decir que especialmente en el controlador de errores no es posible llamar al comando .stop(). Respectivamente no tiene ningún efecto porque después de que la función del controlador finalice, la comunicación se reinicia automáticamente dos segundos después.

Ver jquery.signalR.js (línea 340):

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

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

encontré una solución: En función de controlador de lanzar una excepción, lo que causa que la encuesta no se reinicializa:

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