Hola,
He realizado una aplicación bastante completa bajo PHP, HTML, JavaScript (jQuery) y MySQL. En resumen, lo que la aplicación hace es recoger datos de una máquina, y gestionar dichos datos a través de una interfaz web.
Dicha aplicación la tengo realizada, y funcional, a través de métodos poco ortodoxos de programación (a mi parecer). Por ejemplo, la información de la máquina haría el siguiente recorrido:
1. Un script PHP ejecutado en segundo plano recoge datos de la máquina y los guarda en un fichero XML. Dicho Script sólo será ejecutado una vez y seguirá funcionando a través de un bucle infinito y "ignore_user_abort".
2. El cliente recoge dicha información del fichero a través de PHP y la muestra en un formulario oculto. Dicho PHP es ejecutado por AJAX cada X segundos dentro de la propia web.
3. JavaScript recoge la información del formulario, carga los elementos de la página oportunos y realiza las acciones necesarias con AJAX.
Ahora quiero realizar la aplicación de nuevo, al completo con PHP Orientado a Objetos, y por tanto quiero reducir al mínimo la cantidad de procesos por los que tiene que ser transportada la información.
La intención es hacer algo parecido a lo que hace gMail con los mensajes nuevos. Cuando recibe un mensaje nuevo, este recibe un fichero JSON. Yo por el contrario tengo que estar siempre solicitando la información al servidor, es decir, cada X segundos conecto con el servidor, y le solicito determinada información. Esto en cada cliente.
Yo pretendo que cuando el servidor recoja la información la mande al cliente directamente sin que este tenga que solicitarle nada. De esta forma, además, podré controlar cuantos clientes hay conectados.
Pero no logro encontrar nada en claro, por ello espero que podáis echarme una mano con estas comunicaciones. La aplicación funciona sobre un servidor Apache. Lo más parecido que he probado ha sido:
- HTML5 WebSocket: Sin duda, me vendría de perlas utilizar esta API en la aplicación. Mi problema es crear un servidor de WebSocket. Existe mucha información sobre cliente, pero sobre servidor apenas hay nada, y lo que hay es de pago.
- Long-Polling: después de investigar sobre esta función de AJAX, me doy cuenta de que apenas aporta nada. De nuevo, el cliente debe solicitar información cada X segundos.
Comet: por la información encontrada, diría que es lo que estoy buscando. Pero a veces parece que se trata, de nuevo, de un simple Long-Polling. Creo que se debe a que necesito un servidor compatible con Comet.
- Node.JS: Supuestamente permite utilizar WebSocket. El problema es que se ejecuta a través del terminal, y el servidor no estará siempre encendido. Además, tampoco existe mucha información/documentación al respecto, por lo que no he conseguido sacar nada en claro.
- CometD: enrutador que utiliza la tecnología Comet a través del protocolo Bajeux. Tampoco se exactamente como utilizarlo bajo Apache ni que puedo sacar en claro.
- Dojo WebSocket: Sin un servidor de WebSocket, esta API de Dojo lo único que hace es Long-Polling.
- pyWebSocket: realiza, ahora sí, compatibilidad entre Apache y WebSocket. El problema es que utiliza el desaparecido/muerto lenguaje Python. Aún no he logrado añadir el módulo python (mod_python) a mi instalación de Apache, y apenas existe información clara.
- Módulo WebSocket para Apache: debería ser lo más sencillo. Un módulo para Apache que permita realizar conexiones de WebSocket. El problema es que no logro instalarlo en el servidor que tengo (XAMPP) sino que se instala en el servidor/ruta por defecto, o eso entiendo.
Como podéis comprobar, he indagado bastante en el tema sin éxito alguno. La comunicación perfecta sería la siguiente:
Máquina --> JavaScript Servidor --> JavaScript cliente --> HTML/PHP cliente
Pero no encuentro nada para hacerlo ni parecido. Son muchos los problemas que se me juntan y la verdad estoy completamente perdido.
Espero que alguno de vosotros haya trasteado un poco este tema y pueda arrojarme algo de luz.
Información: Servidor Apache, a través de XAMPP o Zend Server, en MacOS.
Por lo demás, disculpen por un POST tan largo (y eso que me he dejado cosas atrás)
Muchas gracias.