使用socket.io将用户在线/离线状态发送到Laravel

时间:2017-02-04 13:50:13

标签: angularjs node.js laravel-5 socket.io disconnect

我有一个与socket.io实时聊天的应用程序。我想在Laravel后端保存数据库的在线/离线状态。对于在线状态,我没有问题,但对于离线状态,我没有任何计划。我的前端框架是Angularjs 1.x并使用JWT进行身份验证。

事实上,当用户关闭更改路径的浏览器并emit来自这些用户状态的所有用户时,我想在数据库中保存脱机用户状态?

1 个答案:

答案 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];
    });
});