Как закрыть соединение сокета на стороне клиента?Node.js: socket.io закрыть клиентское соединение
Я использую:
- socket.io 0,9
- node.js 0.10.15
- выразить 3.3.4
т.е.: вызов localhost/test
- сервер сторона
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
});
});
- на стороне клиента
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
});
Если я загрузить пробную страницу Мне нужно несколько значений с сервера (getInitData).
На первой странице посещения я получаю данные один раз, при перезагрузке или втором посещении я получаю его дважды и так далее.
Соединение на стороне сервера автоматически закрывается при перезагрузке страницы, и если вы покидаете страницу.
Но на стороне клиента соединение все еще открыто.
Как закрыть соединение на стороне клиента или проверить, есть ли уже открытое соединение?
UPDATE
Я попытался прямо сейчас следующий: (сторона клиента)
window.onbeforeunload = function(e) {
socket.disconnect();
};
Это вызывает на стороне клиента мероприятия разъединения, но я все еще получаю вдвое или ответ тройного.
Как вы обрабатывать 'getInitData' события? –
'getInitData' возвращает некоторые значения из моего собственного аддона написанного узла. эти значения устанавливаются в форме (флажок, текстовое поле и т. Д.) , но я только узнал, что соединение на сервере запускается несколько раз. Каждый раз, когда я перезагружаю страницу, добавляется новое соединение, даже если соединение закрыто. – baam
Нет такой связи, как соединение со стороны сервера и браузера. Существует только одно соединение. Если одна из сторон закрывает ее, то она закрывается (и вы не можете передавать данные в соединение, которое закрыто, очевидно). Теперь браузер закрывает соединение, когда вы покидаете страницу (это не зависит от используемой библиотеки), это, по крайней мере, верно для WebSockets. Если возникает такая проблема, я уверен, что в вашем собственном коде есть ошибка (на стороне сервера). Возможно, вы укладываете некоторые обработчики событий, в которых вы не должны. – freakish