2

こんにちはみんな、これが実際にどのように機能するのか疑問に思っています:

subscriber.on('message', function(channel, message) {
    io.sockets.emit('message', {'channel': channel, 'message': message});

あなたの助けを借りてsocket.ioを本当に学びたいのですが、この行が何のためにあるのか理解するのを手伝ってもらえますか? eは何messageを放出しますか?そしてそれは何channelのためですか?このコード行を理解したいので、助けてください。ありがとう。

4

1 に答える 1

2

表示されているsubscriber変数は、実際には Socket.IO の一部ではなく、Redis データベースへのサブスクリプションです。サブスクライブした Redis クライアントは、messageサブスクライブしているインスタンスに新しいデータがあると、イベントを発生させます。コールバックはchannel、データがサブスクライブされたチャネルである を提供し、次に実際のデータ自体を提供します。

var subscriber = redis.createClient();
subscriber.on('message', function(channel, message) {
  io.sockets.emit('message', {
    'channel': channel,
    'message': message
  });
});

channel 変数と message 変数は特に意味はありません。開発者が何をしているかによって異なります。パブリッシュ中に指定したチャネルは、受信するチャネルです。たとえば、パブリッシュ クライアントを作成すると、publishメソッドを使用してメッセージをパブリッシュできます。

var publisher = redis.createClient();
publisher.publish(channel, message);

したがって、 channel へのパブリケーションは channelfooで受信されますfoo

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

client1.on('message', function(channel, message) {
  console.log('Message: "' + message + '" received from channel "' + channel + '");
});
client2.publish('foo', 'This is a test message.');

コンソールに表示されます:

Message: "This is a test message." received from channel "foo"
于 2013-10-17T23:56:58.357 に答える