2012-05-31 4 views
0

Я пытаюсь разработать приложение node.js, которое передает сообщения между бэкэнд-процессами и узлом, используя redis.Node.js: сеанс не может быть обновлен внутри события redis pubsub?

Я хочу, чтобы сохранить в пользовательском сеансе (подключить сеанс) индикатор, что сообщение получено.

Когда пользователь выполняет запрос ajax «IsMessageRecieved», я хочу вернуть ему значение, которое я помещаю в сеанс.

Я попытался сделать это со следующим кодом без везения, сессия не обновляется.

redisSub.on("message", (channel, connectsid) -> 
    sessionStore.get connectsid, (err, session) -> 
    if (err || !session) 
     return 
    else 
     session.MessageRecieved = true 
     redisSub.unsubscribe('USER_DATA_READY_' + connectsid) 
     return 
    return 
) 

Знаете ли вы, что может быть проблемой?

Спасибо, Лиор

+0

Задавая вопрос node.js в CoffeeScript, вы можете сделать шаг, чтобы люди могли ответить на ваш вопрос. Я бы не советовал вам, если вы хотите получить ответ. – Fritzy

ответ

0

Я упростил свой пример:

var redisSub = require('redis').createClient(); 
redisSub.subscribe('USER_DATA_READY_abc'); 
redisSub.on("message", function(channel, connectsid) { 
    console.log(channel, connectsid); 
}); 

А потом побежал Redis-CLI опубликовать вручную в канал, со значением "ABC".

~ % redis-cli 
redis 127.0.0.1:6379> publish USER_DATA_READY_abc abc 
(integer) 1 

И получил ожидаемый результат:

USER_DATA_READY_abc abc 

Вот что я предлагаю

  • Убедитесь, что на ("сообщение") на самом деле вызывается путем добавления регистрация сообщение.
  • Вручную опубликуйте существующий сеанс, используя redis-cli и посмотрите, вызывает ли это какой-либо результат в вашем обратном вызове.

Я подозреваю, что публикация не производится, или, возможно, вы не подписаны на правильный канал.

Смежные вопросы