如果我想将数据发送给所有已连接的人,我是否应该将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的代码有什么问题吗?
答案 0 :(得分:1)
您的第二个代码示例看起来是正确的。您不希望将sub.on('message', function(channel, msg) {
放在socket.io连接处理程序中。这会在每次有人连接时添加一个新的事件处理程序。
你测试过它是否有效?您需要在频道global
上发布内容,才能触发message
回调。
pub.publish('global', 'here is a message');