Tengo una aplicación web ejecutándose con soporte para algunas piezas de hardware específicas. Esto se logra en los siguientes pasos:Soporte de hardware desde una aplicación web
- usuario ejecuta un pequeño instalador que coloca los archivos de Java (y un par más ) en la máquina cliente. La pieza principal es un contenedor llamado "hardwareManager"
- Visita del usuario de la aplicación web. La aplicación web ejecuta un applet de Java que, debido a un archivo .java.policy colocado durante la instalación, tiene permiso para interactuar con la máquina cliente fuera del entorno limitado del navegador.
- El applet comprueba que el hardwareManager se está ejecutando, y si no ejecuta un comando para iniciarlo.
- El usuario interactúa con la aplicación web que envía comandos al applet a través del javascript. A continuación, el applet escribe comandos en un archivo de texto en la máquina del cliente. El archivo de texto es constantemente monitoreado por el hardwareManager que ejecuta los comandos que lee.
Esto funciona, pero parece torpe. Tengo algunas ideas sobre cómo mejorarlo, pero no sé cuál vale la pena probar, si es que hay alguno.
¿Sería mejor configurar el hardwareManager como un socketServer y hacer que el applet se conecte directamente a él, en lugar de pasar por los archivos de texto? ¿Es eso posible?
¿Hay alguna manera de eliminar el applet por completo y que el javascript se comunique directamente con el hardwareManager? ¿Tal vez escribiendo el hardwareManager para ser un servidor http local? ¿En qué puerto debería ejecutarse? ¿Las limitaciones de javascript xss caben aquí?
Si hace que el hardwareManager acepte solicitudes HTTP, definitivamente puede acceder directamente al JS, incluso mejor puede diseñarlo para implementar comandos como un servicio web REST. XSS: no hay problema aquí. Por supuesto, necesitaría tener el hardwareManager ejecutándose para que acepte los comandos, y una forma de saber en qué puerto. – Viruzzo
añadiendo a la respuesta de @Viruzzu, puede usar [Jetty] (http://docs.codehaus.org/display/JETTY/Embedding+Jetty) que permite incrustar fácilmente un servidor http dentro de una aplicación java. entonces simplemente dirige el código javascript a localhost para interactuar con el hardwareManager –
Viruzzo, por favor haga una respuesta para que yo pueda votar. – pkh