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

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

本文关键字:of io connect callback out or sub pub in redis      更新时间:2023-09-26

如果我想将数据发送给连接的每个人,我是否应该将 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);
      })
     });
    });

会有什么区别吗?

节点.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 **//
    })

任何人都可以告诉我节点.js的代码有什么问题吗?

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

您是否测试过它是否有效?您需要将某些内容发布到通道global上,才能触发message回调。

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