Quiero usar PHP como servidor Socket, pero no sé cómo interactuar con datos de varios clientes diferentes al mismo tiempo.
Porque solo se puede conectar el cliente de aceptación. Si conecta un bucle en aceptar, no se le preguntará al segundo usuario si puede ingresar al bucle, sino si puede conectarse... En este momento. , solo el segundo usuario podrá conectarse. Un usuario sale del bucle y luego el programa regresa y llama a aceptar antes de que el segundo usuario pueda conectarse.
¿Qué tal si utilizamos múltiples procesos para manejarlo? Porque después de aceptar un cliente, debe prepararse inmediatamente para aceptar el siguiente cliente, en lugar de aceptar el siguiente cliente después de procesar el cliente actual.
Después de socket_accept, llame directamente a pcntl_fork(). En este momento, el proceso se dividirá en dos. El valor de retorno de pnctl_fork es 0 y el otro no es 0. El que no es 0 puede simplemente continuar llamando a socket_accept, y el que es 0 maneja la solicitud del cliente.
No sé si pnctl_fork se puede usar en Windows.
Sin embargo, el proceso que devuelve algo distinto de 0 no finaliza así, y se debe llamar a pcntl_wait para evitar que el proceso hijo se quede atascado allí y no finalice por completo. Puede llamar a esto de vez en cuando en el proceso principal y agregar WNOHANG como parámetro de opción para evitar que se atasque cuando no hay procesos secundarios que deban esperar.
Estos son métodos de procesamiento comúnmente utilizados en Linux. Para ser honesto, originalmente quería que usaras subprocesos múltiples, pero después de mirar a mi alrededor no sabía cómo usar subprocesos en PHP, pero encontré una manera de usar procesos, así que lo hice