Redis bietet einen Messaging-Mechanismus im Pub/Sub-Modell (Publish/Subscribe). Der Herausgeber veröffentlicht Nachrichten auf dem angegebenen Kanal und Abonnenten, die den Kanal abonnieren, können die Nachrichten erhalten. Durch diesen Mechanismus können wir Funktionen wie Chatrooms und Bulletin Boards ausführen.
Lassen Sie uns zunächst einige Befehle zu Pub/Sub vorstellen.
Nachricht veröffentlichen
Kanalnachricht veröffentlichenEine Nachricht auf dem angegebenen Kanal veröffentlichen
Angenommen, dort ist eine Auto-Freundesgruppe. Zu diesem Zeitpunkt hat ein Benutzer eine Nachricht gepostet
127.0.0.1:6379> publish car:fans hello,everyone (integer) 0
Der Rückgabewert dieses Befehls ist die Anzahl der Abonnenten, die diesen Kanal abonniert haben. Wie Sie sehen, hat noch niemand diesen Kanal abonniert.
Nachrichten abonnieren
Kanal [Kanal] abonnieren Abonnenten können einen oder mehrere Benutzer abonnieren
127.0.0.1:6379> subscribe car:fans Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "car:fans" 3) (integer) 1
Zu diesem Zeitpunkt ist bereits ein Benutzer der Fahrergruppe beigetreten. Nach und nach schließen sich immer mehr Menschen der Gruppe an.
Wenn ein Benutzer eine Nachricht postet, können andere Gruppenmitglieder die Nachricht sehen.
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"
Hinweis: Wenn der Client den Abonnementbefehl ausführt, wechselt er in den Abonnementstatus und kann nur Pub/Sub-bezogene Befehle ausführen. Darüber hinaus können neue Benutzer, die der Gruppe beitreten, frühere Nachrichten nicht sehen, da dieser Mechanismus die Nachrichten nicht dauerhaft speichert. Obwohl die Funktionen begrenzt sind, ist es einfach genug.
Noch etwas: Je mehr Funktionen desto besser, es kommt vor allem darauf an, ob es für die Szene geeignet ist. Wenn Sie es schaffen, gilt: Je einfacher, desto besser.
Abonnementanzahl anzeigen
pubsub numsub [Kanal...]
Möchten Sie ansehen Wie viele Benutzer sind in der Gruppe?
127.0.0.1:6379> pubsub numsub car:fans 1) "car:fans" 2) (integer) 2
Die Gruppe hat derzeit 2 Benutzer.
Abmelden
Abmelden [Kanal [Kanal ...]]
redis-cli UNSUBSCRIBE 1) "unsubscribe" 2) (nil) 3) (integer) 0
Praktischer Kampf
Nachdem wir das oben genannte Wissen eingeführt haben, können wir die Funktion eines Chatrooms vervollständigen.
Der Pseudocode zum Veröffentlichen einer Nachricht ist wie folgt:
function publist ($chanel, $message) { $redis->publist($channel, $message); }
Der Pseudocode zum Abrufen einer Nachricht ist wie folgt:
//设置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(); }
Hier sind mehrere Punkte zu beachten:
Verbraucher müssen eine lange Redis-Verbindung erstellen,
set_time_limit und default_socket_timeout festlegen, um sicherzustellen, dass die Verbindung blockiert wird PHP-Nachrichtenerfassungsprozess läuft nicht ab und die Socket-Verbindung läuft nicht ab
Derzeit stellt Redis einen neuen Stream-Typ bereit, der viel leistungsfähiger ist. Interessierte Freunde können die relevanten Informationen selbst überprüfen.
Das obige ist der detaillierte Inhalt vonVerwenden Sie Redis, um die Chatroom-Funktion abzuschließen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!