2017-02-04 10 views
0

私はsocket.ioでリアルタイムのチャットアプリを持っています。 Laravelバックエンドでデータベースのオンライン/オフライン状態を保存したい。オンライン状態では問題はありませんが、オフライン状態では計画がありません。私のフロントエンドフレームワークはAngularjs 1.xであり、認証にはJWTを使用します。socket.ioでLaravelにユーザーのオンライン/オフライン状態を送信します

実際には、ユーザがこれらのユーザの状態からすべてのユーザとemit変更ルートのブラウザを閉じると、オフラインのユーザステータスをデータベースに保存しますか?

答えて

0

考えられる解決策の1つは、ソケット接続と切断イベントをリッスンするようなsocket.ioサーバー側のイベントに反応することです。

これは最も簡単な解決策です。サーバーがクラッシュし、切断イベントが発生しない場合に問題が発生します。このような問題を回避するために、間隔チェックを作成することができます。間隔チェックは開かれたソケットをチェックし、ユーザーがDBで開いたり閉じたりして、変更があれば更新します。

クライアント側:

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

クライアントからサーバへデータを渡す方法の例を追加しました。 –

関連する問題