Redis / Node.js - 2 клиента (1 паб / саб), вызывающие проблемы с записью - PullRequest
6 голосов
/ 07 сентября 2011

Попытка создать двух клиентов; один - pub / sub, другой - стандартное соединение. Это не возможно? Должен быть способ абстрагировать это для работы :) По сути, если я делаю get key после запуска test.js, все, что я вижу, это 'valueBefore'. Выход:

node test.js 
Reply: OK

/Users/franklovecchio/Desktop/development/node/node_modules/redis/index.js:487
        throw new Error("Connection in pub/sub mode, only pub/sub commands may
              ^
Error: Connection in pub/sub mode, only pub/sub commands may be used
    at RedisClient.send_command (/Users/franklovecchio/Desktop/development/node/node_modules/redis/index.js:487:15)
    at RedisClient.<anonymous> (/Users/franklovecchio/Desktop/development/node/node_modules/redis/index.js:597:27)
    at Object._onTimeout (/Users/franklovecchio/Desktop/development/node/distributed-cache/client/test.js:19:12)
    at Timer.callback (timers.js:83:39)

Код:

var redis = require('redis');

var client1 = redis.createClient();
var client2 = redis.createClient();

client2.on('message', function (channel, message) {
    console.log('Received a message on channel: ' + channel);       

    client1.set('key', message, redis.print);

});

client2.subscribe('channel');

client1.set('key', 'valueBefore', redis.print);

setTimeout(
    function() {
        client2.publish('channel', 'valueAfter');
    },3000
);

1 Ответ

9 голосов
/ 07 сентября 2011

Возможно, вам нужно опубликовать сообщения с client1, поскольку client2 предназначена для прослушивания сообщений на определенном канале.Несколько слов об этом поведении написано в node_redis readme:

Если вам нужно отправлять обычные команды в Redis в режиме pub / sub, просто откройте другое соединение.

...