0

redis を使用して、バックエンド プロセスとノードの間でメッセージを渡す node.js アプリを開発しようとしています。

メッセージが受信されたことをユーザー セッション (接続セッション) インジケーターに保存できるようにしたいと考えています。

ユーザーが 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
)

何が問題なのか知っていますか?

ありがとう、リオール

4

1 に答える 1

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

これが私が提案するものです

  • ロギング メッセージを追加して、on("message") が実際に呼び出されていることを確認します。
  • redis-cli を使用して既存のセッションを手動で公開し、コールバックで結果がトリガーされるかどうかを確認します。

公開が行われていないか、適切なチャンネルに登録していない可能性があります。

于 2012-06-01T03:39:36.480 に答える