web-dev-qa-db-fra.com

Création d'une conversation privée entre une clé à l'aide d'un node.js et socket.io

Comment envoyer un message à tous les utilisateurs dans un chat privé partageant un conversation_id en utilisant node.js et socket.io?

var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);
conversations = {};

app.get('/', function(req, res) {
res.sendfile('/');
});

io.sockets.on('connection', function (socket) {

socket.on('send message', function (data) {

    var conversation_id = data.conversation_id;

    if (conversation_id in conversations) {

        console.log (conversation_id + ' is already in the conversations object');

        // emit the message [data.message] to all connected users in the conversation

    } else {
        socket.conversation_id = data;
        conversations[socket.conversation_id] = socket;

        conversations[conversation_id] = data.conversation_id;

        console.log ('adding '  + conversation_id + ' to conversations.');

        // emit the message [data.message] to all connected users in the conversation

    }
})
});

server.listen(8080);
24
Asa Carter

Vous devez créer une pièce avec conversation_id et incitez les utilisateurs à s'abonner à cette salle, afin que vous puissiez émettre un message privé vers cette salle par,

client

var socket = io.connect('http://ip:port');

socket.emit('subscribe', conversation_id);

socket.emit('send message', {
    room: conversation_id,
    message: "Some message"
});

socket.on('conversation private post', function(data) {
    //display data.message
});

Serveur

socket.on('subscribe', function(room) {
    console.log('joining room', room);
    socket.join(room);
});

socket.on('send message', function(data) {
    console.log('sending room post', data.room);
    socket.broadcast.to(data.room).emit('conversation private post', {
        message: data.message
    });
});

Voici les documents et l'exemple pour créer une salle, s'abonner à la salle et émettre un message dans une salle:

  1. Socket.io Rooms
  2. Socket.IO s'abonner à plusieurs canaux
  3. Différence de pièces Socket.io entre broadcast.to et sockets.in
55
Srikanth Jeeva

SURE: Simplement,

Voici ce dont vous avez besoin:

 io.to(socket.id).emit("event", data);

chaque fois qu'un utilisateur rejoint le serveur, les détails du socket sont générés, y compris l'ID. C'est l'ID qui aide vraiment à envoyer un message à des personnes particulières.

nous devons d'abord stocker tous les socket.ids dans un tableau,

   var people={};

   people[name] =  socket.id;

ici nom est le nom du destinataire. Exemple:

  people["ccccc"]=2387423cjhgfwerwer23;

Donc, maintenant nous pouvons obtenir ce socket.id avec le nom du destinataire chaque fois que nous envoyons un message:

pour cela, nous devons connaître le nom du destinataire. Vous devez émettre le nom du destinataire sur le serveur.

la dernière chose est:

  socket.on('chat message', function(data){
 io.to(people[data.reciever]).emit('chat message', data.msg);
 });

J'espère que cela fonctionne bien pour vous. !! Bonne chance

15
Trojan