Redis は、Pub/Sub (パブリッシュ/サブスクライブ) モデルのメッセージング メカニズムを提供します。パブリッシャは指定されたチャネルにメッセージをパブリッシュし、チャネルを購読するサブスクライバはメッセージを取得できます。この仕組みにより、チャットルームや掲示板などの機能が完成します。
まず、pub/sub に関するコマンドをいくつか紹介します。
メッセージのパブリッシュ
チャネル メッセージのパブリッシュ指定されたチャネルにメッセージをパブリッシュします
ある場合は car Friends グループで、この時点でユーザーがメッセージを投稿しました
127.0.0.1:6379> publish car:fans hello,everyone (integer) 0
このコマンドの戻り値は、このチャンネルに登録している登録者の数です。ご覧のとおり、このチャンネルにはまだ誰も登録していません。
メッセージを購読する
チャンネルを購読する [チャンネル] 購読者は 1 人以上のユーザーを購読できます
127.0.0.1:6379> subscribe car:fans Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "car:fans" 3) (integer) 1
この時点で、ユーザーはすでにライダーグループに参加しています。徐々にグループに参加する人が増えていきます。
ユーザーがメッセージを投稿すると、他のグループのメンバーがそのメッセージを見ることができます。
127.0.0.1:6379> publish car:fans 'How are you' (integer) 2127.0.0.1:6379> subscribe car:fans Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "car:fans" 3) (integer) 1 1) "message" 2) "car:fans" 3) "How are you"
注: クライアントがサブスクリプション コマンドを実行すると、サブスクリプション状態になり、pub/sub 関連のコマンドのみを実行できます。さらに、このメカニズムではメッセージが保持されないため、グループに参加した新しいユーザーは以前のメッセージを見ることができません。機能は限定されていますが、シンプルなので十分です。
もう 1 つ、機能は多ければ多いほど良いのですが、それは主にシーンに適しているかどうかによって決まります。できるなら、シンプルなほど良いです。
サブスクリプション数の表示
pubsub numsub [チャンネル ...]
Wantグループに何人のユーザーがいるかを表示します
127.0.0.1:6379> pubsub numsub car:fans 1) "car:fans" 2) (integer) 2
グループには現在 2 人のユーザーがいます。
#登録解除
登録解除 [チャンネル [チャンネル ...]]
redis-cli UNSUBSCRIBE 1) "unsubscribe" 2) (nil) 3) (integer) 0
実践的な戦闘
上記の知識を導入すると、チャット ルームの機能が完成します。 メッセージを公開するための疑似コードは非常に簡単です。メッセージを公開するための疑似コードは次のとおりです:function publist ($chanel, $message) { $redis->publist($channel, $message); }
//设置php脚本执行时间 set_time_limit(0); //设置socket连接超时时间 ini_set('default_socket_timeout', -1); //声明频道名称 $channelName = "testpubsub"; try { $redis = new \Redis(); $redis->pconnect('localhost', 6379); $redis->subscribe([$channelName], function ($redis, $channel, $msg) { echo 'channel:' . $channel . ',message:' . $msg . PHP_EOL; }); } catch (\Exception $e) { echo $e->getMessage(); }
以上がRedis を使用してチャット ルーム機能を完了するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。