Foros del Web » Programando para Internet » Javascript »

Monitoreo de programa en C desde web

Estas en el tema de Monitoreo de programa en C desde web en el foro de Javascript en Foros del Web. Hola a todos. Tengo una duda a la hora de empezar un proyecto. Tengo un programa en C que lee unas entradas digitales. Y quiero ...
  #1 (permalink)  
Antiguo 07/12/2015, 15:08
 
Fecha de Ingreso: diciembre-2015
Mensajes: 1
Antigüedad: 8 años, 11 meses
Puntos: 0
Monitoreo de programa en C desde web

Hola a todos. Tengo una duda a la hora de empezar un proyecto. Tengo un programa en C que lee unas entradas digitales. Y quiero monitorizar estas entradas desde web, he pensado en usar javascript. El servidor web y el programa en C corren en una raspberry. Y me gustaria pocer actualiza varias veces por segundo. No se si esto es posible o necesitaria otro enfoque. Si pudieseis guiarme un poco lo agradeceria. Un saludo y gracias.

Última edición por Ecam; 07/12/2015 a las 17:07
  #2 (permalink)  
Antiguo 07/12/2015, 23:42
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Monitoreo de programa en C desde web

Hace unas semanas hice con un amigo un pequeño sistema de control de un robot que corre en un RaspberryPi. El control lo hacíamos desde la web con una interfaz en HTML que disparaba eventos mediante JavaScript y enviaba las órdenes a PHP para ejecutar comandos programados en Python. Para la parte que buscas implementar, te sugiero leer sobre websockets. Solo ten cuidado con las versiones de los navegadores que utilicen. Nosotros no tuvimos problemas con eso ya que el resultado del proyecto iba a ser utilizado en un laboratorio en el cual pedimos que el ordenador tuviera un navegador compatible, por lo que te sugiero hacer lo mismo.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 08/12/2015, 15:06
 
Fecha de Ingreso: diciembre-2015
Mensajes: 67
Antigüedad: 8 años, 11 meses
Puntos: 2
Respuesta: Monitoreo de programa en C desde web

Pues te daré la respuesta completa aunque parte no venga en este tema:

Nota esto requiere que el programa de una especie de archivo de reporte

Empezaremos con la parte del cliente(la del navegador) o sea la pagina:

agregas este pequeño script a tu pagina:
Código Javascript:
Ver original
  1. function LoadDats()
  2. {
  3.      var xmlhttp = new XMLHttpRequest();
  4.      var url = "URL_DEL_SCRIPT_QUE_NOS_DARA_LOS_DATOS";
  5.      // Preparar la funcion de respuesta
  6.      xmlhttp.onreadystatechange = ShowDats;
  7.      // Realizar peticion HTTP
  8.      xmlhttp.open('GET', url, true);
  9.      xmlhttp.send(null);
  10.      function ShowDats()
  11.      {
  12.           if(xmlhttp.readyState == 4)
  13.           {
  14.                if(xmlhttp.readyState == 200)
  15.                {
  16.                     var Dats = xmlhttp.responseText;
  17.                     //La variable Dats contiene la salida del archivo de reporte
  18.                }
  19.           }
  20.      }
  21. }
  22. setInterval("LoadDats()", 100);

Ahora el script al que llamaremos desde el script JS para que nos de los datos:
Código PHP:
Ver original
  1. print(file_get_contents("RUTA_DEL_ARCHIVO_DE_INFORME_DEL_PROGRAMA"));
  #4 (permalink)  
Antiguo 08/12/2015, 18:33
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Monitoreo de programa en C desde web

El problema de AJAX, sanandresm, es que al realizar muchas peticiones con tan poca diferencia de tiempo entre una y otra, se terminará saturando de peticiones y empezará a ralentizarse. Una opción es la técnica long polling, pero las websockets actualmente son la mejor opción; claro, obviando el tema de la limitación de versiones de los navegadores, pero por como van las cosas, cada vez es menos la cantidad de gente que utiliza navegadores antiguos y la tendencia es a que todos migren a navegadores modernos.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 09/12/2015, 15:52
 
Fecha de Ingreso: diciembre-2015
Mensajes: 67
Antigüedad: 8 años, 11 meses
Puntos: 2
Respuesta: Monitoreo de programa en C desde web

Solo quiero ayudar asi que te mandare el codigo para hacerlo por sockets miralo:

Codigo en el servidor:

Código PHP:
Ver original
  1.     set_time_limit(0);
  2.     $address = $_SERVER["SERVER_ADDR"];
  3.     $port = 1000;
  4.     if (($sock = socket_create(AF_INET, SOCK_STREAM, 0)) < 0) {
  5.         echo "socket_create() failed: reason: " . strerror($sock) . "\n";
  6.     }
  7.     if (($ret = socket_bind($sock, $address, $port)) < 0) {
  8.         echo "socket_bind() failed: reason: " . strerror($ret) . "\n";
  9.     }
  10.     if (($ret = socket_listen($sock, 5)) < 0) {
  11.         echo "socket_listen() failed: reason: " . strerror($ret) . "\n";
  12.     }
  13.     do {
  14.         if (($msgsock = socket_accept($sock)) < 0)
  15.         {
  16.             echo "socket_accept() failed: reason: " . strerror($msgsock) . "\n";
  17.         }
  18.         else
  19.         {
  20.             // time() cambia cada segundo
  21.             $t = time();
  22.             do {
  23.                 if(time()!=$t)
  24.                 {
  25.                     $r = file_get_contents("RUTA_DEL_ARCHIVO_DE_INFORME_DEL_PROGRAMA");
  26.                     socket_write($msgsock, $r, strlen($r));
  27.                     $t = time();
  28.                 }
  29.             } while (true);
  30.             close($msgsock);
  31.         }
  32.     } while (true);
  33.     close($sock);

Codigo en el navegador:

Código Javascript:
Ver original
  1. function ViewMessage(message) {
  2.         //Aquí coloca lo que se debe de hacer con el contenido de la variable message el cual es el archivo de reporte
  3.     }
  4.  
  5.     function sendMessage(msg) {
  6.         if ( websocket != null )
  7.         {
  8.             websocket.send( msg );
  9.         }
  10.     }
  11.  
  12.     var wsUri = DIRECCION_DEL_SERVIDOR_PHP;
  13.     var websocket = null;
  14.  
  15.     function initWebSocket() {
  16.         try {
  17.             if (typeof MozWebSocket == 'function')
  18.                 WebSocket = MozWebSocket;
  19.             if ( websocket && websocket.readyState == 1 )
  20.                 websocket.close();
  21.             websocket = new WebSocket( wsUri );
  22.             websocket.onopen = function (evt) {
  23.                 ViewMessage("CONECTADO");
  24.             };
  25.             websocket.onclose = function (evt) {
  26.                 ViewMessage("DESCONECTADO");
  27.             };
  28.             websocket.onmessage = function (evt) {
  29.                 ViewMessage( evt.data );
  30.             };
  31.             websocket.onerror = function (evt) {
  32.                 ViewMessage('ERROR: ' + evt.data);
  33.             };
  34.         } catch (exception) {
  35.                     ViewMessage('ERROR: ' + exception);
  36.         }
  37.     }
  38.  
  39.     function stopWebSocket() {
  40.         if (websocket)
  41.             websocket.close();
  42.     }
  43.  
  44.     function checkSocket() {
  45.         if (websocket != null) {
  46.             var stateStr;
  47.             switch (websocket.readyState) {
  48.                 case 0: {
  49.                     stateStr = "CONECTANDO";
  50.                     break;
  51.                 }
  52.                 case 1: {
  53.                     stateStr = "ABIERTO";
  54.                     break;
  55.                 }
  56.                 case 2: {
  57.                     stateStr = "CERRANDO";
  58.                     break;
  59.                 }
  60.                 case 3: {
  61.                     stateStr = "CLOSED";
  62.                     break;
  63.                 }
  64.                 default: {
  65.                     stateStr = "DESCONOCIDO";
  66.                     break;
  67.                 }
  68.             }
  69.             ViewMessage("WebSocket state = " + websocket.readyState + " ( " + stateStr + " )");
  70.         } else {
  71.             ViewMessage("WebSocket is null");
  72.         }
  73.     }

En la funcion ViewMessage() se puede ver el estado de la conexión o el archivo de reporte ya tu puedes modificar el script JS como nesecites

Última edición por sanandresm; 09/12/2015 a las 16:12

Etiquetas: monitoreo, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:33.