У меня проблема с поиском правильного ответа на мою проблему. Я хочу, чтобы у меня были личные сообщения для каждого пользователя, такого как Telegram. Или, как уведомления в StackOverflow, событие сокета отправляется только определенному пользователю.
io.on('connection', function (socket) {
// this will be only sent to a user that just connected
socket.emit('news', { hello: 'world' });
});
Но как отправить конкретное сообщение с пользовательским идентификатором?
Вот мой socket.js
const socketio = require('socket.io')
const { redis, saveUser } = require('./redis')
module.exports.listen = function(app){
io = socketio.listen(app)
io.on('connection', socket => {
console.log('connected user', socket.id)
socket.on('join', (payload) => {
redis.get(payload.email (err, socket_id) => {
socket.broadcast.to(socket_id).emit('join', `Hello ${payload.whoChat.name} Chat you`)
})
})
})
return io
}
но это ничего не отправляет моему пользователю, если при использовании комнат оно будет отправлено непосредственно в комнаты, и когда я ищу документы, io.to()
и io.broadcast.to()
можно использовать с комнатами сокетов.
поэтому я решил взять это просто, но неправильно здесь, мой server.js справа.
io.on('connection', function (socket) {
socket.on('join', payload => {
socket.emit('join', payload)
})
и на стороне клиента
socket.on('join', (payload) => {
// Compare data from socket with local data if match then push the message
// to users who recieve
if ( payload.userId === localData.userId ) {
this.message.push(payload.message)
}
})
но на самом деле я посылаю это всем пользователям ... как это сделать правильно и правильно? а как сохранить пользователей socket.id? так как socket.id генерируются случайным образом, как вы сохраните его для будущего запроса, когда пользователь отключится?