2012-07-09 28 views
11

Lo he visto mencionar en varios lugares de Internet que los websockets HTML5 no funcionan bien con PHP, que PHP por su naturaleza solo es adecuado para su uso. Por otro lado, veo varios tutoriales sobre el uso de PHP con websockets y he notado cierta implementación de PHP websocket como http://code.google.com/p/phpwebsocket/¿Son adecuados los websockets con PHP?

¿Alguien tiene alguna información definitiva sobre el uso de websockets con PHP? ¿Se pueden usar con PHP, cuáles son las ventajas/desventajas de usarlos con PHP en lugar de con Java o Python, y por qué he leído a muchas personas que dicen que no funcionan bien juntas?

+2

Quizás le interese leer sobre NodeJS y socket.io. Depende de su proyecto, pero podría darle lo que necesita: [nodejs.org] (http://nodejs.org) [socket.io] (http://socket.io) – imperium2335

Respuesta

7

El problema es que WebSockets está diseñado para procesos/procesos de larga ejecución que mantienen múltiples conexiones controladas por eventos, mientras que PHP (y su cohorte Apache) se diseñó alrededor del paradigma de proceso único de corta duración (por ejemplo max_execution_time is commonly set to 30 seconds, y la sesión tiene un solo hilo).

Eso no quiere decir que sea imposible escribir una implementación del servidor WebSockets en PHP. Soy consciente de que existe al menos un proyecto que tiene done exactly this (pero tenga en cuenta que incluso este ejemplo se ejecuta desde la línea de comandos, no a través del mod_php). Pero es probable que la implementación PHP de WebSockets sea incompatible con la configuración del hosting barato/compartido donde PHP se usa con mayor frecuencia.

Si bien es posible en PHP, terminas teniendo que ejecutar un proceso de servidor por separado (de Apache) de todos modos, y si estás en el tipo de hosting que permite procesos de servidor separados, entonces es más fácil escribir WebSockets código en algo que está diseñado para programación dirigida por eventos.

Si no tiene planeado atender a decenas de miles de conexiones dúplex concurrentes, es probable que sea mejor utilizar una combinación de AJAX y SSE con su back-end de PHP.

+0

¿Qué pasa con php-fpm? ¿Y php7 con tecnología JIT? Esta respuesta debe ser actualizada. – LeonanCarvalho

0

Recientemente probé phpwebsocket y no funciona en este momento (php 5.4 y chrome) el código se refiere a una segunda tecla en el handshake que no existe en rev. 13 del protocolo websocket No tengo tiempo para leer el RFC para entender cuál es el problema.

Es seguro que esta solución es más elegante y reactiva que AJAX con un largo sondeo, pero los websockets no son estables en este momento, creo que sería más interesante esperar a que el w3c lo anuncie estable.

Cuestiones relacionadas