I'm trying to emit events from outside the context of Socket.IO processes into specific room.
WORKING EXAMPLE of io.emit
without specifying roomId
:
// client side
socket.emit('join-chat-room');
socket.on('client-side-channel', data => {
console.log('Got message:', data);
});
// server side set redis adapter
const redisAdapter = require('socket.io-redis');
const redisUrl = env.REDIS_URL;
const pubClient = redis.createClient(redisUrl);
const subClient = redis.createClient(redisUrl);
const adapter = redisAdapter({ pubClient, subClient });
adapter.prototype.on('error', function (err) {
log.error(`adapter error: ${err}`);
});
io.adapter(adapter);
WORKING: io.to(...).emit(...) in context of socket:
socket.on('join-chat-room', async () => {
await socket.join('chat-room');
io.to('chat-room').emit('client-side-channel', 'chat-data1');
});
NOT-WORKING: io.to(...).emit(...) from outside the context of Socket.IO processes:
io.to('chat-room').emit('client-side-channel', 'chat-data2');
but this works from outside the context of Socket.IO processes:
io.emit('client-side-channel', 'chat-data2');
question from:
https://stackoverflow.com/questions/65599042/socket-io-not-emit-to-rooms-outside-the-context-of-socket-io-processes-with-io-a 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…