当用户关闭浏览器选项卡时,我需要通过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
});
});
请告诉我这个问题..提前谢谢..
答案 0 :(得分:2)
当用户连接时 - 在服务器端注册它发生的时间
Socket.IO具有心脏跳动和ping功能。因此,只需在服务器端订阅disconnect
事件,一旦发生 - 意味着客户端断开连接 - 并且在客户端连接时您有服务器时间。这样你就有了客户会话的时间跨度。
不要相信客户会告诉您任何时间或重要数据,因为客户可以简单地“撒谎” - 这会导致服务器端的黑客/作弊/漏洞。
在客户端断开连接之前,没有可靠的方法来发送数据。 Socket.IO中没有任何内容,也没有任何一个传输(WebSockets)。除了有太多不同的断开连接方式(断电,强制关闭,以太网电缆输出,wifi丢失等)。