@newaitix

Как удалить соединение в случае если пользоваетеь перещел на другую страницу?

var clients={};
exports.subscribe=function(req,res,id){
	if(typeof id=='number'&&id>=0){
		if(typeof clients[id]=='undefined')
			clients[id]=[];
		var cl=clients[id];
	}
	cl.push(res);
	res.on('close',function(){
		console.log('disconnect chat №',id);
		cl.splice(cl.indexOf(res),1);
	});
};
exports.publish=function(message){
	var id=message['id'];
	clients[id].forEach(function(res){
		res.end('{"message":"'+message['body']+'"}');
	});
	clients[id]=[];
};


Когда пользователь подписывается на события он добавляется в массив clients[id_комнаты].
Тут же res.on('close',function(){..., если соединение закрыто клиентом то он удаляется из массива.
close срабатывает в случае если пользователь обновил страницу или закрыл вкладку/браузер. А если пользователь перешел на другу страницу то close не сработает. Как быть в данной ситуации?
В том числе мне не понятно как отличить одно соединение от другого.
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
повесить в window.onbeforeunload код, отправляющий какой-то unsubscribe?

Или удвоить траффик – ожидать обязательного ответа от клиента на каждое сообщение с сервера – заодно это поможет очень примерно оценивать скорость связи с этим клиентом.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы