Red de conocimiento informático - Material del sitio web - ¿Cómo envía mensajes el backend de PHP al cliente de manera oportuna?

¿Cómo envía mensajes el backend de PHP al cliente de manera oportuna?

Utilice el siguiente código para cambiar la configuración.

Código backend

push.php

lt? Lenguaje de programación del lado del servidor (abreviatura de Preprocesador de hipertexto profesional)

¿Usar? Trabajador\Trabajador;

¿Requerido_una vez? . /trabajador hombre/cargador automático .PHP ';

$trabajador? =?Nuevo? trabajador('websocket://0 . 0 . 0 . 0:1234 ');

//?El número de procesos aquí debe establecerse en 1.

$ trabajador- gt; =?1;

//?Establece un puerto de comunicación interna después de que se inicia el proceso de trabajo.

$ trabajador->onWorkerStart? =?Función (trabajador)

{

//?Abrir puertos internos para facilitar que los sistemas internos envíen datos. ¿Formato de protocolo de texto? ¿Nueva línea de texto $inner_text_worker? =?Nuevo? trabajador('Text://0.0.0.0:5678');

$ internal_text_worker->onMessage? =?Función($conexión,?$búfer)

{

¿Global? $worker;

//?$formato de matriz de datos, que contiene uid, lo que significa usar ese uid para enviar datos a la página.

¿$datos? =?json_decode($buffer,?true);

$uid? =?$ data[' uid '];

//?Envía datos a la página de uid a través de Workerserman.

¿$retirado? =?sendMessageByUid($uid,?$buffer);

//?Devolver el resultado de envío

$ conexión->;Send($ret? OK?:?Failed') ;

};

$ interior _ texto _ trabajador- gt; escuchar();

}; Se agrega una nueva propiedad para mantener la asignación del uid a la conexión.

$ trabajador->uidConnections? =?array();

//?Función de devolución de llamada $worker->ejecutada cuando el cliente envía un mensaje; =?La función ($conexión,?$datos) usa ($worker)

{

//?Determina si el cliente actual está autenticado, es decir, si el uid está configurado .

Si (!isset($ conexión- gt;uid))

{

//?Si no hay verificación, trate el primer paquete como uid (Para facilitar la demostración, aquí no se realiza ninguna verificación real)

$ conexión- gt;uid? =?$data

/*?Guarde la asignación de uid a la conexión para encontrar la conexión por uid.

*? Implementar datos push para un uid específico.

*/

$ trabajador- gt;uid conexiones[$ conexión- gt;uid]? =?$Conectar;

Regresar;

}

};

//?Cuando el cliente se desconecta.

$ trabajador->onClose? =?función($conexión)usando($trabajo)

{

global? $worker;

if(isset($ conexión- gt;uid))

{

//?Eliminar asignación al desconectar

unset($ trabajador- gt;conexiones uid[$ conexión- gt;uid]);

}

};

//? Los datos se envían a todos los usuarios autenticados.

¿Función? Difundir (mensaje)

{

¿Globalmente? $trabajador;

foreach($trabajador- gt;uidConnections?as?$conexiones)

{

$conexión-gt;send($message);

}

}

//?Enviar datos para uid

¿Función? sendMessageByUid($uid,?$message)

{

¿Global? $trabajador;

if(isset($trabajador- gt;uidConnections[$uid]))

{

$Conexiones? =?$ trabajador- gt;uid conexiones[$ uid];

$ conexión- gt;enviar($ mensaje);

¿Regresar? Real;

}

¿Devolución? False;

}

//?Ejecutar todos los subprocesos de trabajo (de hecho, actualmente solo hay uno definido)

worker::runAll();< / p>

¿Iniciar servicio back-end

php? ¿push.php? ¿comenzar? -d

La interfaz recibe el código js enviado.

var? ¿ws? =?Nuevo? websocket('ws://127.0.0.1:1234');

ws.onopen? =?Función(){

var? ¿fluido? =?uid 1 ';

ws . enviar(uid);

};

ws.onmessage? =?Función (e){

Alarma (datos electrónicos);

}; Código para mensajes push de back-end

//?Establecido para push interno conexión del zócalo del puerto.

¿$Cliente? =?stream_socket_client('TCP://127.0.0.1:5678',?$errno,?$errmsg,?1,stream_client_connection|stream_client_persistent);

//?Los datos enviados, incluido el campo uid , indica que se envía a este uid.

¿$datos? =?Array(' uid ' = gtuid1 ', ?percent ' = gt'88');

//?Al enviar datos, tenga en cuenta que el puerto 5678 es el puerto del protocolo de texto y el texto El protocolo debe estar al final de los datos. Agregue un carácter de nueva línea.

fwrite($client,?json_encode($data)."\n");

//?Leer resultados push

Echo? fread($client,?8192); El uid aquí no es necesariamente el ID del usuario, sino que también puede entenderse como el ID de la tarea, es decir, el ID de la tarea.