【问题标题】:Socket.io channel and message callbacksSocket.io 通道和消息回调
【发布时间】:2013-10-18 07:56:58
【问题描述】:

大家好,我想知道这是如何工作的:

subscriber.on('message', function(channel, message) {
    io.sockets.emit('message', {'channel': channel, 'message': message});

我真的很想在你的帮助下学习socket.io,你能帮我理解这条线是做什么用的吗?会发出什么messagechannel 是干什么用的?我想了解这行代码,请帮助我。谢谢。

【问题讨论】:

    标签: javascript node.js sockets socket.io


    【解决方案1】:

    您看到的subscriber 变量实际上并不是 Socket.IO 的一部分,它是对 Redis 数据库的订阅。当订阅的实例有新数据时,订阅的 Redis 客户端将触发 message 事件。回调提供channel,这是订阅数据的频道,然后是实际数据本身。

    var subscriber = redis.createClient();
    subscriber.on('message', function(channel, message) {
      io.sockets.emit('message', {
        'channel': channel,
        'message': message
      });
    });
    

    channel 和 message 变量没有任何具体含义,它们取决于作为开发人员的您正在做什么。无论您在发布期间指定什么渠道,您都会收到什么渠道。例如,如果我创建一个发布客户端,我可以使用publish 方法发布消息。

    var publisher = redis.createClient();
    publisher.publish(channel, message);
    

    因此,频道foo 的发布将在频道foo 中收到:

    var client1 = redis.createClient();
    var client2 = redis.createClient();
    
    client1.on('message', function(channel, message) {
      console.log('Message: "' + message + '" received from channel "' + channel + '");
    });
    client2.publish('foo', 'This is a test message.');
    

    您将进入您的控制台:

    Message: "This is a test message." received from channel "foo"
    

    【讨论】:

    • 这个函数多次执行的原因是什么? subscriber.on('message', function(channel, message) { io.sockets.emit('message', { 'channel': channel, 'message': message }); });
    • 该函数将Redis事件数据传递给Socket.IO。
    • 这个函数只执行一次怎么办?
    • 使用subscriber.once(...)
    猜你喜欢
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 2018-12-28
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多