node.js - socket.io 正在向所有房间而不是指定的房间发出信号

标签 node.js express socket.io

我是 Node 和套接字 io 的新手。我正在尝试为我自己的几个应用程序实现实时通知系统。因此,使用node、express和socket io,代码如下:

服务器端代码:

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

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

    socket.on('unsubscribe', function(room) {
        socket.leave(room);
    });
});

客户端代码:

var sio = io.connect('http://localhost:9000');

var ch1 = sio.emit('subscribe', 'channel1');

ch1.on('log', function (data) {
    console.log('channel1: ', data);
});

var ch2 = sio.emit('subscribe', 'channel2');

ch2.on('log', function (data) {
    console.log('channel2: ', data);
});

例如,我从路线(快速)触发/发出事件:

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

    var data1 = {
        channel: 'channel1',
        evennt: 'log',
        message: 'Hello from channel1...'
    };

    io.to(data1.channel).emit(data1.event, data1);
});

当我点击路线时,io.to(data1.channel).emit(data1.event, data1);正在工作,但它将数据发送到两个房间/ channel ,但是我期望仅在 ch1 中获取数据,因为 data1.channel 包含 channel1 所以我期望以下处理程序将接收数据:

ch1.on('log', function (data) {
    console.log('channel1: ', data);
});

请注意,两个 channel 都有相同的日志事件。我走在正确的轨道上吗?这可能吗?

最佳答案

var ch1 = sio.emit('subscribe', 'channel1');
var ch2 = sio.emit('subscribe', 'channel2');

您正在为两个房间订阅相同的套接字 (sio)。此外,ch1ch2 是对 sio 的引用。

如果你想正确测试它,你应该为第二个 channel 创建第二个套接字:

var sio2 = io.connect('http://localhost:9000');
var ch2  = sio2.emit('subscribe', 'channel2');

关于node.js - socket.io 正在向所有房间而不是指定的房间发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45173552/

相关文章:

javascript - socket.io 房间为每个客户端重复相同的消息

node.js - gulp 将所有 css 文件缩小为单个文件

node.js - 在哪里存储我的 Node 计划

node.js - 如何在socket.io nodejs服务器上列出房间

javascript - Sequelize 一次仅考虑一个关联

node.js - 使用 Express.js 将 SQL Server api 部署到 Heroku

node.js - 如何连接到远程 Node.js 服务器?

javascript - XHR 请求 -> 获取 ERR_EMPTY_RESPONSE

node.js - Typescript Express 请求输入

javascript - nodejs中匿名函数的使用