signal mvc hubs example signalr

mvc - ¿Cómo dejar de sondear en SignalR?



signalr mvc (2)

¿Hay alguna forma de detener el servidor de sondeo en SignalR? Quiero detener el servidor de sondeo si se produce un error. Los centros de votación se inician con $.connection.hub.start() , por lo que asumí que podría detenerse con $.connection.hub.stop() o algo así. Pero no parece funcionar, el sondeo continúa incluso después de llamar a stop() . ¿Hay otra manera de dejar de sondear?

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


En primer lugar, ¿estás seguro de que es necesario? Si se produce un error de comunicación, obviamente querrá reintentarlo.

Sin embargo, busqué en el código fuente y me refiero a que, especialmente en el controlador de errores, no es posible llamar .stop() comando .stop() . Respectivamente, no tiene ningún efecto porque después de que la función del controlador finaliza, 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 alternativa: en la función del controlador, lanzar una excepción, lo que causa que la encuesta no se reinicialice:

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


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

$.connection.hub.stop();