2013-09-11 5 views
0

Мне нужно отправить данные на сервер nodejs через socket.io, когда пользователь закрывает вкладку браузера.испускание данных через сокет в браузере закрыть/закрыть окно

Я пытался делать:

var data={}; 
window.onbeforeunload = function() { 
// i have a object to be sent 
data.data1='abcd'; 
data.data2=1234; 
socket.emit("senddata",data); 
} 

Этот код работает, когда пользователь перемещается вокруг нажатия ссылки на сайте, но оленья кожа работа, когда пользователь закрывает вкладку браузера

Я также попытался настройки сокета Io на на сторону сервера, как показано ниже .. думать об ошибке может быть связана с розеткой соединения закрывается перед тем, излучающими данными:

var io = require('socket.io').listen(app.listen(port)); 
io.configure(function() { 
io.set('close timeout',12000); 
}); 

Он также не работал большая часть т он время.

Я также попытался это на стороне клиента:

var socket = require('socket.io').listen(80, { 
"sync disconnect on unload":false 
}); 

Он также не работает

Я пытался получать данные как этот

var io = require('socket.io').listen(app.listen(port)); 

io.sockets.on('connection', function (socket) { 

socket.on('senddata', function (data) { 
// data processing 
}); 
}); 

пожалуйста ..help мне с этой проблемой ..thanks заранее ..

ответ

2

Когда пользователь подключается - зарегистрируйтесь на стороне сервера во время его возникновения.
Socket.IO имеет функцию избиения и пинга. Поэтому просто подпишитесь на событие disconnect на стороне сервера, и как только это произойдет - клиент отключится - и у вас есть время сервера, когда у клиента было соединение. Таким образом, у вас есть промежуток времени клиентской сессии.

Не доверяйте клиенту рассказать вам какое-либо время или важные данные, поскольку клиент может просто «лгать», что приводит к хакам/читам/ошибкам на вашей стороне сервера.

Нет надежного способа отправить данные непосредственно перед отключением от клиентской стороны. В Socket.IO нет ничего для этого, ни в одном из транспортов (WebSockets). Кроме того, существует слишком много разных сценариев отключения (выключение питания, принудительное закрытие, выход кабеля Ethernet, потеря Wi-Fi и т. Д.).

+0

спасибо за ответ, но у меня есть объект данных, который будет отправлен .. это был просто пример .. извините, мой пример был вводящим в заблуждение..и изменили вопрос снова ... – righteouspratik

+0

Нет надежного способа сделать это так как существует множество реализаций браузера, а также сценарии закрытия соединения. Спецификация WebSockets также не указывает на это. – moka

Смежные вопросы