我有一个与socket.io实时聊天的应用程序。我想在Laravel后端保存数据库的在线/离线状态。对于在线状态,我没有问题,但对于离线状态,我没有任何计划。我的前端框架是Angularjs 1.x并使用JWT进行身份验证。
事实上,当用户关闭更改路径的浏览器并emit
来自这些用户状态的所有用户时,我想在数据库中保存脱机用户状态?
答案 0 :(得分:1)
一种可能的解决方案是对socket.io服务器端事件做出反应,例如侦听套接字连接和断开事件。
这是最简单的解决方案,当您的服务器崩溃并且您从未收到断开事件时会出现问题。为避免此类问题,您可以创建间隔检查,在每分钟检查打开的套接字和用户在数据库中打开/关闭并更新是否有更改。
客户方:
var socket = io("http://127.0.0.1:3000/", { query: "id=434354fds43" });
服务器端:
var io = require('socket.io')(80);
var users = {};
io.use(function (socket, next) {
console.log('Query: ', socket.handshake.query);
var id = socket.handshake.query.id;
if (id) {
users[socket.id] = id;
return next();
}
// call next() with an Error if you need to reject the connection.
next(new Error('Authentication error'));
});
io.on('connection', function (socket) {
// New connection, get the ID from map
var id = socket.id;
socket.on('disconnect', function () {
// User left
delete users[id];
});
});