在浏览器关闭/窗口关闭时通过套接字发送数据

时间:2013-09-11 12:20:20

标签: node.js socket.io

当用户关闭浏览器选项卡时,我需要通过socket.io将数据发送到nodejs服务器。

我尝试过:

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
});
});
请告诉我这个问题..提前谢谢..

1 个答案:

答案 0 :(得分:2)

当用户连接时 - 在服务器端注册它发生的时间 Socket.IO具有心脏跳动和ping功能。因此,只需在服务器端订阅disconnect事件,一旦发生 - 意味着客户端断开连接 - 并且在客户端连接时您有服务器时间。这样你就有了客户会话的时间跨度。

不要相信客户会告诉您任何时间或重要数据,因为客户可以简单地“撒谎” - 这会导致服务器端的黑客/作弊/漏洞。

在客户端断开连接之前,没有可靠的方法来发送数据。 Socket.IO中没有任何内容,也没有任何一个传输(WebSockets)。除了有太多不同的断开连接方式(断电,强制关闭,以太网电缆输出,wifi丢失等)。