繁体   English   中英

io.connect回调内部或外部的redis子/发布

[英]redis sub/pub in or out of io.connect callback

如果我想将数据发送给每个连接的人,是否应该将redis订阅事件放在io.connect回调之外? 还是最好将它放在io.connect如下所示:

    io.on('connection', function(socket){ 
      sub.on('message',function(channel,msg){
       Project.findAll({ where: {id: msg} },{raw:true}).success(function(d) {
       console.log(d);
       io.sockets.emit("activities",d);
      })
     });
    });

有什么区别吗?

Node.js的

var express = require('express'),
    app = express(),
    http = require('http').createServer(app),
    io = require("socket.io").listen(http),
    redis = require("redis"),
    Sequelize = require('sequelize');

    var pub = redis.createClient();
    var sub = redis.createClient();
    sub.subscribe('global');

    app.get('/p/:tagId', function(req, res){ 
       res.render('index.html')
    });

    sub.on('message',function(channel,msg){
      Project.findAll({ where: {id: msg} },{raw:true}).success(function(d) {
      console.log(d);
      io.emit("activities",d);
     })
    });

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

     //** code **//
    })

谁能告诉我node.js的代码有什么问题?

您的第二个代码示例看起来正确。 您不想将sub.on('message', function(channel, msg) {放入socket.io连接处理程序内,这将在每次有人连接时添加一个新的事件处理程序。

您是否测试了它是否正常工作? 您需要在global通道上发布一些内容,以触发message回调。

pub.publish('global', 'here is a message');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM