2017-02-04 122 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

添加示例如何將數據從客戶端傳遞到服務器,例如用戶標識。 –