【发布时间】:2014-09-25 12:45:37
【问题描述】:
当我使用 socket.io 进行发布/订阅时,以下代码可以正常工作。
基本上,我从浏览器发送聊天消息。在服务器上,我收听此消息并将其发回给所有人,来自服务器的相同消息。因此,我希望我发送的每条消息都会返回/打印 1 条消息。
通过以下内容,我可以从多个浏览器登录,当我发送聊天消息时,它会按预期作为单个聊天消息返回/打印。
io.use(socketHandshake({store: sessionStore, key:'jsessionid', secret:'secret', parser:cookieParser()}));
io.on('connection', function (socket) {
socket.on('chat', function (message) {
io.emit('chat', "hello world");
});
});
但是,当我尝试使用 redis 进行 pub/sub 时,出现了问题。
从第一个浏览器:1 条聊天消息导致打印出 1 条聊天消息
从第二个浏览器:1 条聊天消息导致打印出 2 条聊天消息
从第三个浏览器:1 条聊天消息导致打印出 3 条聊天消息
var sub = redis.createClient();
var pub = redis.createClient();
sub.subscribe('chat');
io.use(socketHandshake({store: sessionStore, key:'jsessionid', secret:'secret', parser:cookieParser()}));
io.on('connection', function (socket) {
socket.on('chat', function (message) {
// io.emit('chat', "hello world");
pub.publish('chat', "hello world");
});
sub.on('message', function (channel, message) {
io.emit(channel, message);
});
});
我错过了什么?我是初学者,我正在使用最新版本的 express、socket.io、socket.io-handshake 和 redis 来尝试这个示例 http://blog.cloudfoundry.org/2013/01/24/scaling-real-time-apps-on-cloud-foundry-using-node-js-and-redis/。
我对这个 redis pub/sub 感到困惑。请帮忙。
【问题讨论】:
标签: node.js redis socket.io publish-subscribe node-redis