Создание частного чата между ключом с помощью node.js и socket.io
Как я могу отправить сообщение всем пользователям в частном чате, где вы используете chat_id, используя node.js и 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);
Ответы
Ответ 1
Вам нужно создать комнату с conversation_id
и заставить пользователей подписаться на эту комнату, чтобы вы могли отправить личное сообщение в эту комнату,
клиент
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
});
Сервер
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
});
});
Вот документы и пример создания комнаты, подписки на комнату и сообщения Emit в комнату:
Ответ 2
УВЕРЕННО: Просто
Это то, что вам нужно:
io.to(socket.id).emit("event", data);
всякий раз, когда пользователь присоединяется к серверу, будут генерироваться сведения о сокетах, включая идентификатор. Это идентификатор действительно помогает отправить сообщение конкретным людям.
сначала нам нужно сохранить все сокеты в массиве,
var people={};
people[name] = socket.id;
здесь имя - имя получателя. Пример:
people["ccccc"]=2387423cjhgfwerwer23;
Итак, теперь мы можем получить этот socket.id с именем получателя всякий раз, когда мы отправляем сообщение:
для этого нам нужно знать recievername. Вам нужно выпустить имя приемника на сервер.
Последняя вещь:
socket.on('chat message', function(data){
io.to(people[data.reciever]).emit('chat message', data.msg);
});
Надеюсь, что это хорошо работает для вас. Удачи