¿Por qué PHP no puede hacer un equivalente a socket.io? ¿Qué hay de mejor en JavaScript en ese aspecto?

Socket.IO es un marco que utiliza la API de WebSocket. WebSocket define una conexión persistente y casi en tiempo real entre el cliente y el servidor, lo que significa que ambos deben estar escuchando todo el tiempo. Siempre están algo “ocupados”.

En Node.js esto no es un problema en absoluto, ya que la naturaleza de Node no se bloquea y se basa en eventos. Eso significa que si no hay mensajes entrantes, el nodo no está haciendo nada. Se ejecuta en un solo hilo y puede servir muchas conexiones al mismo tiempo.

PHP por otro lado, funciona basado en solicitudes. Cuando llega una solicitud, inicia un proceso, determina con qué necesita responder y luego se cierra. Tener miles de conexiones simultáneas en PHP es poco probable porque estas solicitudes generalmente se procesan con bastante rapidez.

Esto se reduce a que, para PHP, tener sockets web no es eficiente para el servidor, si es posible. En cuanto a alguien que intenta hacer un equivalente, no hay razón para no intentarlo, pero solo necesita escribir su lado del cliente en JavaScript mientras el código del sitio del servidor está en PHP. Esa es otra ventaja de Socket.IO y node.js: el código se puede compartir entre el cliente y el servidor.

Respuesta continua de Nihad Dizdarevic:

PHP no puede ejecutarse en la computadora del cliente, por lo que realmente no puede “esperar” la acción del cliente. Mientras JS se ejecuta en todos los navegadores.

PHP tiene algo similar a node / eventloop

Se llama react-php I / O sin bloqueo controlado por eventos con PHP, Ratchet – PHP WebSockets

Sin embargo, no puede implementarlo en un alojamiento web compartido.

Beneficios sobre PHP

Node / JavaScript es asíncrono a diferencia de PHP, que es sincrónico (cuando se usa con apache).