2017-02-04 2 views
0

socket.io와 실시간으로 채팅 앱을 가지고 있습니다. Laravel 백 엔드의 데이터베이스에 온라인/오프라인 상태를 저장하려고합니다. 온라인 상태에 대해서는 문제가 없지만 오프라인 상태에 대해서는 어떤 계획도 없습니다. 내 프런트 엔드 프레임 워크는 Angularjs 1.x이며 인증을 위해 JWT를 사용합니다.socket.io를 사용하여 Laravel에 사용자의 온라인/오프라인 상태를 보냅니다.

실제로 사용자가 변경 경로의 브라우저를 닫을 때 오프라인 사용자 상태를 저장하고이 사용자 상태에서 모든 사용자를 emit으로 저장 하시겠습니까?

답변

0

하나의 가능한 솔루션은 소켓 연결 및 연결 끊기 이벤트 수신과 같은 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

클라이언트에서 서버로 데이터를 전달하는 방법에 대한 예제가 추가되었습니다 (예 : 사용자 ID 포함). –

관련 문제