【发布时间】:2019-01-07 14:36:52
【问题描述】:
我在为我的问题找到正确答案时遇到了问题。如果我可以说,我希望像 Telegram 这样的每个用户都有私人消息传递。或者像 StackOverflow 上的通知一样,套接字事件仅发送给特定用户。
io.on('connection', function (socket) {
// this will be only sent to a user that just connected
socket.emit('news', { hello: 'world' });
});
但是如何发送带有自定义 id 的特定消息?
这是我的 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 是随机生成的,当用户断开连接时,如何将其保存以供将来的请求使用?
【问题讨论】:
标签: node.js websocket socket.io