javascript - redis sub/pub 进出 io.connect 回调

标签 javascript node.js redis socket.io

如果我想将数据发送给所有连接的人,是否应该将 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 连接处理程序中。这会在每次有人连接时添加一个新的事件处理程序。

你测试过它是否有效吗?您需要将某些内容发布到 channel global 以触发 message 回调。

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

关于javascript - redis sub/pub 进出 io.connect 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27616576/

相关文章:

node.js - 错误 : UNABLE_TO_VERIFY_LEAF_SIGNATURE Phonegap Installation

redis - Redis Stream Xadd 命令中是否必须输入 "field"?

scala - 在 Play 中排队异步任务! - 正确的方式

javascript - select2 不保存编辑输入

二维数组中的 JavaScript 类型错误

javascript - 错误 [ERR_REQUIRE_ESM] : require() of ES Module not supported

javascript - 从数组中调用函数

redis - 如何在redis中为特定命令配置fsync

javascript - Node JS 基本路由器被覆盖

javascript - 如何在同一aspx页面的新窗口中显示最大化的gridview?