2017-02-04 3 views
0

J'ai une application de chat en temps réel avec socket.io. Je veux enregistrer le statut en ligne/hors ligne sur la base de données dans Laravel back-end. Pour le statut en ligne, je n'ai pas de problème, mais pour le statut hors ligne, je n'ai aucun plan. Mon framework frontal est Angularjs 1.x et utilise JWT pour l'authentification.Envoyer l'état en ligne/hors ligne à Laravel avec socket.io

En fait, je veux enregistrer l'état de l'utilisateur hors ligne dans la base de données lorsque l'utilisateur ferme le navigateur de changer de route et emit tous les utilisateurs de l'état de cet utilisateur?

Répondre

0

Une solution possible serait de réagir aux événements côté serveur socket.io comme l'écoute de la connexion socket et la déconnexion des événements.

Cela serait la solution la plus simple, les problèmes se produiraient lorsque votre serveur se bloque et que vous ne recevez jamais l'événement de déconnexion. Pour éviter ce problème, vous pouvez créer une vérification d'intervalle qui, après chaque minute, vérifie les sockets ouverts et les utilisateurs ouverts/fermés dans DB et les mises à jour s'il y a des changements.

côté client:

var socket = io("http://127.0.0.1:3000/", { query: "id=434354fds43" }); 

côté serveur:

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

Je dois passer le nom d'utilisateur pour déconnecter l'événement dans 'socket.server.js'. comment passer paramètre de client.js –

+0

Ajout d'un exemple comment passer des données du client au serveur, exemple avec l'ID utilisateur. –