Come interrompere il sondaggio in SignalR?
-
25-10-2019 - |
Domanda
C'è un modo per fermare server di polling in SignalR? Voglio smettere di polling del server in caso di errore. hub polling è iniziato con $.connection.hub.start()
, così ho pensato che potesse essere fermato con $.connection.hub.stop()
o qualcosa di simile. Ma non sembra funzionare, polling continua anche dopo aver chiamato stop()
. C'è un altro modo per fermare pollling?
<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>
Soluzione
Se stai usando hub si può fermare il collegamento del mozzo:
$.connection.hub.stop();
Altri suggerimenti
In primo luogo sono sicuro che è necessario? Se si verifica un errore di comunicazione che, ovviamente, si vuole riprovare.
Comunque, ho guardato nel codice sorgente e voglio dire che soprattutto nel gestore degli errori non è possibile il comando di chiamata .stop()
. Rispettivamente non ha effetto perché dopo funzione di gestione è terminata che la comunicazione viene reinizializzato automaticamente due secondi dopo.
See jquery.signalR.js (linea 340):
$(instance).trigger("onError", [data]);
window.setTimeout(function () {
poll(instance);
}, 2 * 1000);
Ho trovato una soluzione: In funzione del gestore di un'eccezione, che causano tale sondaggio non viene reinizializzata:
connection.error(function (error) { //$.connection.hub.error()
$('#messages').append('<li>' + "error connecting: closing connnection" + '</li>');
throw "Close SignalR connection";
});