Pregunta sobre xmlhttprequest, tizen, can-bus, websocket – ¿La mejor forma de mostrar datos de alta velocidad desde una interfaz de telnet en una vista web?

3

Me gustaría mostrar los datos provenientes de una interfaz de telnet en una vista web. Tengo un demonio en ejecución que lee datos de bus CAN y produce aproximadamente 500 líneas de ~ 40 caracteres por segundo en un puerto telnet. Son unos pocos mensajes que se ejecutan a 100 Hz y la mayoría de los demás se ejecutan a 10 o 5 Hz, por lo que, en resumen, es de unos 500 / segundo. Quiero capturar los últimos valores de cada paquete y mostrarlos en una página web. La página web se carga localmente (no a través de HTTP) y el demonio puede estar en un host diferente, por lo que hay comunicación entre dominios.

Esto es lo que intenté y no pude hacer:

Utilice XMLHttpRequest. Puedo abrir la conexión y leer los datos, pero no puedo borrar el campo responseText de los valores anteriores cuando obtengo el evento onprogress. No puedo permitirme analizar el texto de respuesta para obtener el último valor, ya que este crece muy rápidamente. También voy a tener problemas de memoria, así que esto es un no-go.
WebSockets y Socket.IO: ninguno de los dos ha demostrado ser exitoso al conectarse a una interfaz de telnet porque espera que HTTP se convierta primero al socket directo.

Así que mi pregunta es, ¿cómo puedo lograr esto mejor? Algunas opciones las veo, pero estoy seguro que hay más:

Agrega la conversión de HTTP a socket en el demonio canlogserver al que estoy tratando de adjuntar. ¿Cómo? (Es código abierto C para que yo pueda agregarlo)Escriba una interfaz PHP que se conecte al demonio a través de telnet y pueda enviar datos a la vista web a través de HTTP. Esto parece muy ineficiente con múltiples viajes a través de la pila de IP. <¿Algo más en el código del cliente JS para evitar el problema de mi búfer y leer los mensajes del servidor telnet, mostrar datos y luego descargar el búfer? Necesito asegurarme de obtenertodos los mensajes una vez que se abre el zócalo, por lo que abrir, cerrar, reabrir no funcionará ya que eso significará que los mensajes se pierden.

Gracias,

Tim

Tu respuesta

2   la respuesta
2

los WebSockets tienen un protocolo de enlace de tipo HTTP y luego tienen algunos marcos para cada mensaje (no son sockets en bruto después del protocolo de enlace).

Sin embargo, podrías usarwebsockify para establecer un puente entre un cliente WebSocket (navegador) y un socket TCP simple. Websockify también le permite enviar / recibir datos binarios hacia / desde el servidor TCP, incluso cuando el protocolo WebSocket (por ejemplo, Hixie) o el navegador no admite tipos binarios directamente (por ejemplo, matrices tipográficas).

NOVNC utiliza websockify para poder conectarse directamente a un servidor VNC que aún no tiene soporte integrado de WebSocket. Websockify incluso tiene una pequeña prueba incluida que demuestra cómo conectar un simple emulador de terminal basado en navegador a un servidor telnetd.Renuncia: Hice websockify y noVNC.

1

La mejor solución es usar WebSockets si quieres HTML5 puro sin ningún complemento. Tenga en cuenta los navegadores compatibles con dicha tecnología, puede encontrarlista de navegadores compatibles y la versión del protocolo aquí.

Los WebSockets tienen que hacer handshake cuando se establece la conexión, es habitual en las líneas http. Después de eso, todos los mensajes deben tener un marco, cuando se reciben y cuando se envían. El navegador lo hace automáticamente, pero debe implementar esta funcionalidad para su daemon.

Hay soluciones listas, depende del idioma que uses.

Si desea implementar el protocolo WebSockets por su cuenta, verifique las fuentes de implementación de Java, por ejemplo, y use la especificación oficial:RFC6455

Creo que WebSockets es la mejor manera de ir. Java / Silverlight / Flash puede ser otra solución, pero requiere más esfuerzos y puede que no sea tan fácil de escalar como la implementación de WebSockets, que simplemente procesará mensajes y creará elementos DOM como DIV en otro contenedor DIV con mensajes recibidos.

Preguntas relacionadas