2012-08-17 19 views
5

Actualmente estoy desarrollando una aplicación PHP que va a usar websockets para la comunicación cliente-servidor. He escuchado numerosas veces que PHP no se debe usar para aplicaciones de servidor debido a la falta de mecanismos de subprocesamiento, a su administración de memoria (referencias cíclicas) o a la biblioteca de socket desagradable.Servidor Websocket con PHP

Hasta ahora, todo está funcionando bastante bien. Estoy usando phpws como la biblioteca websocket y Doctrine DBAL para acceder a diferentes sistemas de bases de datos; PHP es la versión 5.3.8. El servidor debe servir a un máximo de 30 clientes. Sin embargo, especialmente en los últimos días, he leído varios artículos que indican la ineficacia de PHP para aplicaciones de larga ejecución.

Ahora no estoy al tanto de si debo continuar usando websockets con PHP o reconstruir toda la aplicación del servidor. He probado Python con Socket.IO, aunque no obtuve los resultados que esperaba.

supongo que tengo las siguientes opciones:

  • mantener todo como está.
  • Haga que la aplicación use Ajax en combinación con Socket.IO - p. ejecutar un script en el servidor que invoca las llamadas ajax del cliente cuando los datos se envían al servidor.

El último punto parece bastante interesante, aunque requeriría algo de trabajo ... ¿Sería un problema para los servidores ejecutar todas las solicitudes de los clientes a la vez?

¿Qué recomendarías? ¿Sigue siendo válido el problema con la gestión de memoria de PHP (estoy usando gc_collect cada vez que un cliente envía datos al servidor)? ¿Existen otros motivos además de las razones obvias (sin hilos, ...) para no usar PHP como servidor?

+0

¿Entonces está preguntando si debería eliminar su diseño actual y funcional? Las preguntas como esta no son realmente válidas aquí, vas a tener que decidir qué codificar en ti. ¿Qué otros lenguajes del lado del servidor conoces? Publique su código python y alguien puede ayudarlo a encontrar el problema si decide reescribir su código. – xthexder

Respuesta

4

puede intentar ejecutar su socket.io en un servidor de nodo en otro puerto en el servidor (es decir si no está usando un plan de hosting como goDaddy).

Lo estoy usando y las actuaciones son realmente satisfactorias. Tengo un servidor Apache en el puerto 80 que sirve mis archivos php, y mis comunicaciones entre el servidor y el cliente se realizan usando un servidor Node.js ejecutando socket.io en el puerto 8080 (dev) o 843 (prod).

Node.js es muy ligero y tiene un gran rendimiento, pero debe ejecutarlo como servidor. Nodejitsu.com es una solución de alojamiento que tiene el protocolo de websocket disponible y está en versión beta, por lo que todavía es gratis por el momento. Solo tenga en cuenta que necesita escuchar en el puerto 80 con socket.io, esta es una limitación de su red.

Si quiere que se acceda a todas sus páginas en el puerto 80, necesitará un proxy inverso como varnish.

Espero que ayude! Que tengas un buen día.

+1

+1 para Node.js con socket.io para obtener mejores resultados –

0

¿Hay otras razones además de las razones obvias (sin enhebrar, ...) por no usar PHP como servidor?

Sí, muchas funciones de socket son incompatibles entre sí y es un desastre depurar.

Traté algo similar a mí mismo y dejar de fumar sind frustrado todas las funciones que pensé que tendría sentido ni hacer lo que esperaba

Cuestiones relacionadas