【问题标题】:Send user online/offline status to Laravel with socket.io使用 socket.io 将用户在线/离线状态发送到 Laravel
【发布时间】:2017-02-04 13:50:12
【问题描述】:

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

事实上,当用户关闭更改路由的浏览器和emit所有这些用户状态的用户时,我想将离线用户状态保存在数据库中?

【问题讨论】:

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


    【解决方案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];
        });
    });
    

    【讨论】:

    • 我需要通过用户名来断开socket.server.js 中的事件。如何从client.js传递参数
    • 添加了如何将数据从客户端传递到服务器的示例,例如用户 ID。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    相关资源
    最近更新 更多