Jak mogę zamknąć połączenie z gniazdem po stronie klienta?Node.js: socket.io zamknij połączenie klienta
Używam:
- socket.io 0,9
- node.js 0.10.15
- wyrazić 3.3.4
IE: wezwanie localhost/test
- serwer strona
var test = io
.of('/test')
.on('connection', function (socket) {
console.log('open socket: ' + socket);
socket.on('disconnect', function() {
console.log('disconnected event');
//socket.manager.onClientDisconnect(socket.id); --> endless loop with this disconnect event on server side
//socket.disconnect(); --> same here
});
});
- po stronie klienta
var socket = io.connect('http://localhost:3000/test');
socket.on('disconnect', function() {
console.log('disconnect client event....');
});
socket.emit('getInitData', function (data) {
.. do something with data
});
Gdybym załadować stronę testową Potrzebuję wartości z serwera (getInitData).
Podczas pierwszej wizyty strony otrzymuję dane jeden raz, po ponownym załadowaniu lub drugiej wizycie otrzymuję je dwa razy i tak dalej.
Połączenie po stronie serwera jest automatycznie zamykane po ponownym wczytaniu strony i po opuszczeniu strony.
Ale po stronie klienta połączenie jest nadal otwarte.
Jak mogę zamknąć połączenie po stronie klienta lub sprawdzić, czy jest już otwarte połączenie?
UPDATE
Próbowałem teraz następujący: (po stronie klienta)
window.onbeforeunload = function(e) {
socket.disconnect();
};
To wyzwala po stronie klienta, termin rozłączyć, ale nadal pojawia się dwukrotnie lub potrójne odpowiedź.
Jak radzicie sobie 'imprezy getInitData'? –
'getInitData' zwraca niektóre wartości z mojego napisanego addonu węzła. te wartości są ustawiane w formularzu (pole wyboru, pole tekstowe itp.) , ale właśnie się dowiedziałem, że połączenie na serwerze jest uruchamiane wiele razy. Za każdym razem, gdy ponownie ładuję stronę, nowe połączenie jest dodawane, mimo że połączenie jest zamykane. – baam
Nie ma czegoś takiego jak połączenie po stronie serwera i przeglądarki. Jest tylko jedno połączenie. Jeśli jedna ze stron go zamknie, zostanie zamknięta (i nie można przekazać danych do połączenia, które jest oczywiście zamknięte). Teraz przeglądarka zamyka połączenie po opuszczeniu strony (nie zależy to od używanej biblioteki), co jest prawdą w przypadku WebSockets. Jeśli pojawi się taki problem, to jestem pewien, że jest błąd we własnym kodzie (po stronie serwera). Możliwe, że układasz kilka programów obsługi zdarzeń tam, gdzie nie powinieneś. – freakish