Comunidad de diseño web y desarrollo en internet online

Comunicación Cliente-Servidor correcta

Citar            
MensajeEscrito el 16 Nov 2011 10:47 am
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.

Por lgruz

10 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Nov 2011 12:24 pm
GMail usa "long-pulling" o WebSocket según lo soporte el navegador o no.

En tu caso solo tienes dos opciones "long-pulling" o WebSocket. Yo que tú le pondría todas las fichas a WebSocket.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 16 Nov 2011 12:34 pm
Muchas gracias DriverOp. Efectivamente, voy detrás del WebSocket. El Long-Polling es parecido a lo que hago ahora, y no me gusta nada la gran cantidad de comunicaciones que se tienen que realizar entre cliente y servidor. Esto, unido al hecho de que la aplicación no tiene problema ninguno para limitar navegadores a los compatibles con WebSocket, lo convierten en la mejor alternativa y que será la utilizada cuando HTML5 se estandarice por completo.

El problema es crear este servidor de WebSocket. Apache aún no está preparado para ello. Ahora estoy trasteando con "phpwebsocket", y parece funcionar bastante bien, aunque desde hace 2 años no recibe ninguna actualización, lo que me hace pensar que existen mejores alternativas, y eso es lo que estoy buscando.

Por lgruz

10 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Nov 2011 04:33 pm
Yo no estoy en el tema pero en su momento sentí curiosidad por esto. Ignoro si hay algún módulo de Apache pero si lo hay, dudo mucho que esté disponible en la mayoría de los hostings de pago.

Ah, a propósito: Phyton no está ni muerto ni abandonado ;).

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 16 Nov 2011 04:43 pm
Evidentemente uso un servidor propio. Los hosting de pago no ofrecen nada como WebSocket y demás aún.

Respecto a Python, fallo mío, no me refería a Python sino a mod_python, el módulo de Python para Apache. Este lleva sin ser actualizado desde octubre de 2010. Es necesario para hacer funcionar pyWebSocket.

Por lgruz

10 de clabLevel



 

safari

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.