2017-02-04 109 views
0

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

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

回答

0

一个可能的解决方案就是对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]; 
    }); 
}); 
+0

我需要通过用户名在'socket.server.js'断开事件。如何从client.js传递参数 –

+0

添加示例如何将数据从客户端传递到服务器,例如用户标识。 –

相关问题