PHP implementa la suscripción y publicación de redis (para el procesamiento de tareas asincrónicas)

1.
Nombre del concepto y significado del
canal del canal: el objeto directamente operado por el productor y el consumidor
publican al productor: envían un mensaje al canal
suscriben al consumidor: se suscriben a uno o más canales
psubscribe consumer: coinciden para suscribirse a uno o más canales
punsubscribe unsubscribe : Hacer coincidir la cancelación de la suscripción, cancelar la suscripción de todos los canales sin parámetros
cancelar la suscripción Cancelar la suscripción: cancelar la suscripción del canal especificado, cancelar la suscripción de todos los canales sin parámetros
pubsub Listar los canales activos actuales (al menos una suscripción)

2. Notas
1) El productor abre una conexión cuando publica un mensaje, y la conexión puede cerrarse inmediatamente después de la publicación.
2) El canal solo recibe mensajes enviados por publicación. No almacena mensajes. Si el canal no está suscrito, el mensaje se descarta.
3) Consumo de suscripción El usuario debe estar en línea todo el tiempo, bloquear el acceso al mensaje y desconectarse significa darse de baja de inmediato.

3. Redis puede realizar las funciones de publicación de suscripción y cola de mensajes, la diferencia entre ambos es:
1) Los suscriptores de Redis pueden ser múltiples y pueden procesar simultáneamente los mensajes publicados, si el suscriptor no está en línea (el servicio no se inició) Se perderá y el mensaje no persistirá. La publicación y la suscripción se ejecutan juntas. Ignore este mensaje sin uno.
2) La cola de mensajes solo puede ser procesada por un cliente. Después del procesamiento, el mensaje se marca o elimina. Incluso si el servidor no inicia el mensaje, no se perderá.
3) El escenario de uso del usuario debe determinarse de acuerdo con la precisión y la sensibilidad de los datos comerciales. Por ejemplo, el registro se puede implementar con redis de publicación y suscripción. No importa si se pierde.

4. Utilice directamente el método proporcionado por la extensión php-redis para implementar la publicación y suscripción
1) Suscripción del consumidor Subscribe.php
<? Php
// Establezca el tiempo de ejecución del script php
set_time_limit (0);
// Establezca el tiempo de espera de conexión de socket
ini_set ('default_socket_timeout', -1);
//
Declara elnombre del canal de prueba$ channelName = "testPubSub";
$ channelName2 = "testPubSub2";
prueba {
  $ redis = new Redis ();
  // Crea un enlace largo
  $ redis-> pconnect ('ip', 6379);
  // Bloquear obtener mensaje
  $ redis-> suscribirse (matriz ($ channelName, $ channelName2), función ($ redis, $ chan, $ msg) {
    echo "channel:". $ Chan. ", Mensaje:". $ msg. "\ n";
  });
} catch (Excepción $ e) {
  echo $ e-> getMessage ();
}

2) El productor envía el mensaje Publish.php
<? Php
$ channelName = "testPubSub";
$ channelName2 = "testPubSub2";
// Envía el mensaje al canal especificado
try {
  $ redis = new Redis ();
  $ redis-> connect (' 192.168.75.132 ', 6379);
  para ($ i = 0; $ i <5; $ i ++) {
    $ data = array (' key '=>' key '. $ I,' data '=>' testdata ') ;
    $ ret = $ redis-> Publique ($ channelName, json_encode ($ data));
    print_r ($ ret);
  }
} catch (Exception $ e) {
  echo $ e-> getMessage ();
}

3) Realizar suscripciones de consumidor y comenzar a bloquear php Subscribe.php

4) Ejecute el productor y comience a enviar el mensaje php Publish.php

php. \ Publish.php
22222 #Volver
al resultado de la ejecución:
ver el número de suscripciones de canal en la terminal del consumidor

php. \ Subscribe.php
canal: testPubSub, mensaje: {"key": "key0", "data": "testdata"}
canal: testPubSub, mensaje: {"key": "key1", "data": "testdata "}
canal: testPubSub, mensaje: {" key ":" key2 "," data ":" testdata "}
canal: testPubSub, mensaje: {" key ":" key3 "," data ":" testdata "}
canal: testPubSub, mensaje: {"key": "key4", "data": "testdata"}

De: https://www.jmsite.cn/blog-586.html

 

Supongo que te gusta

Origin www.cnblogs.com/WebLinuxStudy/p/12749998.html
Recomendado
Clasificación