Visualizzare contenuti dinamici dal server Web incorporato
-
09-12-2019 - |
Domanda
Ho un dispositivo incorporato che esegue una versione ridotta di un server HTTP.Attualmente, può visualizzare pagine HTML statiche.Ecco un esempio di come visualizza una pagina HTML statica:
char *text="HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"
"<html><body>Hello World!</body></html>";
IPWrite(socket, (uint8*)text, (int)strlen(text));
IPClose(socket);
Quello che mi piacerebbe fare è visualizzare contenuti dinamici, ad es.lettura da un sensore.Quello che ho pensato finora è di aggiornare la pagina ogni tanto con
<meta http-equiv="refresh" content="600">
e utilizzare sprintf () per collegare la lettura del sensore al testo variabile per la risposta.
C'è un modo per farlo senza dover aggiornare costantemente la pagina?
Soluzione
Puoi provare il seguente approccio (dalla mia esperienza):- Dividere il contenuto statico e dinamico, ridurre al minimo il contenuto dinamico.
- Creare un'interfaccia pseudo CGI, ad es.URL your_embedded_site / sensore.cgi dovrebbe essere associato alla generazione della seguente risposta HTTP:
sprintf(cgi_str, "HTTP/1.0 200 OK\r\nContent-Type: text\r\nContent-Length: %d\r\n\r\nvalue=%02d", 8, sensor_value);
o semplicemente (questo è tutto sulle tue considerazioni di progettazione):
sprintf(cgi_str, "HTTP/1.0 200 OK\r\nContent-Type: text\r\nContent-Length: %d\r\n\r\n%02d", 2, sensor_value);
- Utilizzare javascript semplice o piccola applet java per richiedere periodicamente your_embedded_site / sensore.cgi.Si noti che javascript è generalmente dipendente dal browser e può essere disattivato, l'applet java richiederà anche contenuti statici aggiuntivi - alcuni *sensor_reader.class " ma ha una straordinaria libertà nel presentare i dati e nell'estendere la lettura e la visualizzazione semplici con più funzionalità.
Questo permette di organizzare la comunicazione in modo molto efficiente, invece di ricaricare l'intera pagina:parte del codice - front-end dell'utente-verrà eseguita nel browser, altra parte-back-end-sul dispositivo incorporato.
Altri suggerimenti
Ti prego non utilizzare un applet Java per fornire questo.
AJAX e Javascript lato client rendono questo genere di cose facili, senza la cattiveria di un'applet incorporata.
Dove "cattiveria" può includere:
- Problemi di sicurezza Java
- Discrepanze di runtime Java
- maggiore dimensione del payload (le applet sono grandi, rispetto ai frammenti di codice Javascript)
- problemi di velocità (può essere lento per avviare l'applet)
- la pagina web è più difficile da mantenere
- e così via.
Riassumendo:è il 2013, basta usare Javascript e AJAX.