Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Consiglio per interazione applicazione - pagina web

    Ciao a tutti,
    questo è il mio primo post, spero di averlo inserito nella sezione corretta del forum.

    Una breve presentazione, mi occupo essenzialmente di elettronica (hardware e firmware per microcontrollori e alla necessità scrivo anche software su sistemi tipo Windows/Linux) e vorrei riuscire a modificare un'applicazione che gira su un OS Linux basato su linea di comando in modo tale da aggiungere una interfaccia utente di tipo web.

    Il sistema embedded che sto analizzando non ha un OS GUI based (stile Windows oppure Ubuntu tanto per fare un esempio), ma è solo a linea di comando (Linux distro Debian), quindi per avere una interfaccia utente "windows-like" pensavo di appoggiarmi ad una pagina web che per i motivi che verranno illustrati dovrebbe essere di tipo dinamico. Operando in questo modo dovrei riuscire ad esporre all'utente una pagina web che sarà in genere popolata con pulsanti, campi di testo e immagini utilizzate essenzialmente come indicatori di stato (led luminosi).
    L'applicazione che controlla le attività della mia macchina attualmente lavora standalone ovvero in modo indipendente da tutto il resto; poichè una pagina web (di qualcunque natura esso sia, statica oppure dinamica) per sua natura è asincrona devo trovare un qualche meccanismo per fare comunicare fra loro in modo bidirezionale queste due entità (programma in C e interfaccia utente stile pagina web).

    Inizio inciso
    --------------
    Esistono sistemi (Microchip, Arduino) che hanno uno stack HTTP integrato che fa già tutto (interazione con codice applicativo attraverso funzioni di callback associate agli eventi sulla pagina web), questa soluzione attualmente viene utilizzata per altri progetti ed è già funzionante, ma quello che mi interessa adesso consiste nel capire se si può fare una cosa simile anche con OS standard stile Windows oppure Linux generando una soluzione "universale" che potesse essere di libero utilizzo e che consentisse di aggiungere ad una applicazione stile linea di comando una interfaccia basata su pagine web.
    Fine inciso
    -------------

    A questo punto ho pensato ad una cosa di questo tipo, chiedo quindi a voi esperti se l'idea è fattibile oppure se devo cambiare strada.
    Poichè il mio sistema embedded ha una OS Linux posso sfruttare il suo web server integrato per fare girare una o più pagine web che saranno in sostanza il modo con cui esporre all'utente l'interfaccia al mio device hardware.
    Quando l'utente, ad esempio, preme un pulsante io devo poter attivare una risorsa hardware, ad esempio, un uscita a relay. Il problema è come poter notificare questo all'applicazione in C che gira sulla macchina e che si occupa di gestirne il funzionamento.

    Come prima idea pensavo di aprire un socket bidirezionale con un Web Service e di utilizzare lo stesso Web Service con la pagina web. La mia idea quindi consiste nel notificare al Web Service che l'utente ha premuto un certo pulsante sul Web Form e attraverso socket comunicare dal Web Service alla mia applicazione questo evento. A questo punto l'applicazione eseguirà alcuni compiti e dovrà resistituire una risposta alla pagina Web passando attraverso lo stesso Web Service.

    In sostanza pensavo (ma non so se si possa fare e se l'ho espresso in modo corretto) di usare un Web Service come ponte di collegamento fra questi due mondi che per loro natura sono fra loro asincroni ed in particolare fra il mio hardware o meglio l'applicazione in C che lo gestisce e la pagina web che mi piacerebbe utilizzare come GUI dato che il mio OS non ha un desktop manager e quindi la possibilità di programmare a finestre (l'hardware non dispone neppure di uscita video, quindi nisba monitor ).

    Spero di avere espresso in modo chiaro quello che è il mio scopo, se non l'ho fatto in modo eauriente cercherò di esemplificare in modo migliore il tutto, ringrazio comunque fin da ora chi avrà la voglia ed il tempo di leggere quanto sopra e darmi una indicazione in merito.

    Grazie a tutti!

    The Grinch

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156
    Ciao,
    potresti dare un'occhiata a http://www.gnu.org/software/libmicrohttpd per agganciare la creazione di pagine web direttamente alla tua applicazione C.
    Oppure potresti scriverti un cgi (anche in C nel caso il tuo sistema non riuscisse a far girare l'interprete perl o php).

  3. #3
    Originariamente inviato da zucchino
    Ciao,
    potresti dare un'occhiata a http://www.gnu.org/software/libmicrohttpd per agganciare la creazione di pagine web direttamente alla tua applicazione C.
    Oppure potresti scriverti un cgi (anche in C nel caso il tuo sistema non riuscisse a far girare l'interprete perl o php).
    Prima di tutto grazie per la risposta.

    L'approccio suggerito della libreria libmicrohttpd è interessante però incorpora all'interno del programma il server http. Quello che mi interessava era riuscire a capire se era possibile svincolare la gestione del web server dal mio programma; cerco di spiegarmi meglio, immaginiamo un vecchio programma scritto in console mode che si voglia dotare di interfaccia grafica senza doverlo stravolgere. Allo stato attuale la connettività internet e la disponibilità di un client browser consente la visualizzazione di una pagina web demandando tutto il lavoro di gestione al client ed al server web che la ospita. Da questa prospettiva avendo già un server web si tratterebbe "solo" di scrivere delle pagine html dinamiche che possano interagire con l'applicativo in modo bidirezionale.

    In sostanza vorrei lasciare tutto il lavoro di gestione della pagina di per se stessa e della gestione quindi del protocollo di comunicazione al web server, cercando di implementare all'interno della pagina web un qualche meccanismo di scambio dati con la mia applicazione che nel frattempo gira per conto suo.

    Ho quindi pensato che se fosse possibile dalla pagina web aprire un socket su localhost ad una certa porta e gestire all'interno della mia applicazione la connessione su localhost a questo socket il tutto si sarebbe semplificato dato che si tratterebbe solo di definire un qualche protocollo di comunicazione basato su un semplice socket.

    La dinamica delle operazioni sarebbe quindi quella di avere un socket aperto in lettura sul mio programma in console mode che ascolta su localhost ad una porta predefinita. Quando dall'esterno il web server risponde ad una richiesta di connessione da parte di un utente mandando al suo client la pagina html, quest'ultima al suo interno dovrebbe implementare un meccanismo (e qui che non so se si possa fare ed in che modo) che possa aprire un socket in scrittura verso il mio programma comunicando che la pagina è stata attivata da un utente e che quindi è pronta per interagire, ed un socket in ascolto per ricevere le risposte dal mio programma.
    Non so se sono riuscito a rendere l'idea.

    Nel caso delle CGI, correggimi se mi sbaglio, io posso dalla pagina web attraverso questa tecnologia mandare in esecuzione un programma scritto in linguaggio nativo per la macchina, ma il programma viene mandato in esecuzione e può fare ad esempio alcune semplici operazioni poi termina la sua esecuzione. Io devo invece comunicare con un programma che è sempre attivo sulla macchina dato che esegue una serie di operazioni necessarie ad esempio a leggere dei sensori o comandare dei motori ecc... la situazione quindi è leggermente differente, nel mio caso la pagina web dovrebbe segnalare, al programma che è in esecuzione, la sua esistenza ed iniziare a scambiare dati con lui.

    Spero di essere riuscito a trascrivere quella che è la mia idea, grazie ancora per qualsiasi suggerimento.

    Ciao a presto
    TheGrinch

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156
    Originariamente inviato da TheGrinch

    Ho quindi pensato che se fosse possibile dalla pagina web aprire un socket su localhost ad una certa porta e gestire all'interno della mia applicazione la connessione su localhost a questo socket il tutto si sarebbe semplificato dato che si tratterebbe solo di definire un qualche protocollo di comunicazione basato su un semplice socket.
    questo potresti farlo dalla tua applicazione CGI.
    Come dici tu devi considerare che avrai una nuova connessione ad ogni pagina richiesta.


    Comunque tu scelga di interfacciarti al tuo programma originale, esso dovrà in qualche modo essere cambiato:
    - integrando libmicrohttp o similari (in questo modo non avrai il protocollo di comunicazione ma accederai direttamente alle funzioni di accesso all'HW)
    - aggiungendo la gestione del socket per lo scambio di comandi.

    in ogni caso, visto che le operazioni che esegui sull'HW potrebbero richiedere un certo tempo, ti consiglio di generare una pagina all'invocazione del CGI e poi "aggiornarla" al volo al termine dell'operazione, magari utilizzando AJAX o similari.

  5. #5
    Originariamente inviato da zucchino

    ...

    - aggiungendo la gestione del socket per lo scambio di comandi.

    in ogni caso, visto che le operazioni che esegui sull'HW potrebbero richiedere un certo tempo, ti consiglio di generare una pagina all'invocazione del CGI e poi "aggiornarla" al volo al termine dell'operazione, magari utilizzando AJAX o similari.
    Ciao grazie.
    Proviamo a ragionare sulla soluzione socket, in questo caso, lato applicazione devo aprire un socket in ascolto su una porta predefinita ed un socket da usare per trasferire indietro le informazioni alla pagina.

    Per il numero di connessioni se un secondo utente cerca di agganciarsi non potrebbe fare nulla dato che la porta verso l'applicazione è già impegnata in questo caso dovrei gestire la situazione emettendo un messaggio di avvertimento per l'utente che una connessione è già attiva. In sostanza una volta che autentico la prima connessione rifiuto tutte le altre.

    Per aggiornare la pagina mi consigli di utilizzare AJAX, con questo approccio quindi intendi che dalla mia applicazione trasmetto quello che devo aggiornare sulla pagina web attraverso socket ed in seguito dentro la pagina web attraverso AJAX andare a fare l'aggiornamento dei vari oggetti nella pagina? Da AJAX è possibile gestire direttamente i socket o devo appoggiarmi a qualche altra tecnologia?

    Abbi pazienza per le domande, ma sto cercando di farmi strada e vedere un po' di luce fra una pletora di tecnologie e soluzioni e faccio spesso confusione non essendo un adetto ai lavori.

    Grazie come sempre!

    TheGrinch

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156
    Ciao,
    gli attori in gioco dovrebbero essere i seguenti:

    codice:
    +-----------+           +---------+             +---------+
    |           | socket    |         | html + AJAX |         |
    | vecchio C |<--------->|   CGI   |<----------->| browser |
    |           |           |         |             |         |
    +-----------+           +---------+             +---------+
    a fronte di una richiesta del brower, il tuo web server lancia il cgi che fornisce una prima pagina html che possa essere aggiornata con ajax. nel farttempo il cgi si collega con un socket al "vecchio C". Quando il vecchio C ha nuovi dati li fornisce al cgi che manda l'update dalla pagina al browser.

    Nel caso in cui un altro browser si colleghi hai due strade:
    1- il CGI verifica che la porta in uso del "vecchio C" è già occupata e genera una pagina html di errore
    2- fai in modo che il vecchio C possa gestire più di una connessione socket sulla stessa porta e riconosca quale instanza di cgi è collegato (come ad esempio funzionano tutti i servizi di rete).


    in generale AJAX potrebbe essere un sinonimo di html+javascript+altro... non è li' che sta l'intelligenza, ma è nel CGI che genera le pagine html+javascript che verranno mandate al client.

  7. #7
    Originariamente inviato da zucchino

    ...

    in generale AJAX potrebbe essere un sinonimo di html+javascript+altro... non è li' che sta l'intelligenza, ma è nel CGI che genera le pagine html+javascript che verranno mandate al client.
    Ciao,
    grazie come sempre per la disponibilità.
    Lo schema rispecchia quello che volevo provare a realizzare, nel frattempo ho fatto qualche prova. Poichè mastico un po' di Java ho provato a inserire una applet all'interno di una pagina web, dall'applet poi apro un socket verso il server. Dal lato server, giusto per fare un prova veloce, al posto del programma in C ho un codice Java che apre un websocket e si mette in ascolto su una porta predefinita e nota all'applet che viene richiamato dalla pagina web.
    A questo punto quando dal brower richiedo la pagina web (adesso per le prove lavoro su localhost) parte anche l'applet ed effettivamente viene aperto un canale di comunicazione verso il server e posso scambiare dei messaggi fra i due oggetti (pagina web e codice del server).
    Direi che questa implementazione dovrebbe riuscire a soddisfare il modello di cui abbiamo parlato in precedenza.

    Secondo te conviene che continui a lavorare nel mondo Java con l'applet oppure migrare su CGI con AJAX (il mio sistema embedded Linux ha una distro Debian a linea di comando ed include al suo interno un server web denominato lighttp)?

    Grazie ancora.

    Ciao
    TheGrinch

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156
    Ciao,
    Non sono molto esperto del mondo Java, ma secondo me le due alternative sono equivalenti sia dal punto di vista del carico computazionale sia del client che del server.
    Puoi tranquillamente proseguire con Java.

  9. #9
    Originariamente inviato da zucchino
    Ciao,
    Non sono molto esperto del mondo Java, ma secondo me le due alternative sono equivalenti sia dal punto di vista del carico computazionale sia del client che del server.
    Puoi tranquillamente proseguire con Java.
    Ciao,
    siccome sono un sostenitore e per quanto mi è possibile un fautore della libera conoscenza appena avrò qualche novità concreta la pubblicherò su queste pagine affinchè questa mia esperienza possa essere utile anche ad altri. Penso che un lavoro di questo tipo possa aprire parecchie possibilità per rivitalizzare vecchi programmi realizzati su linea di comando e quindi privi di interfaccia visuale e per aggirare l'ostacolo di non avere un sistema con desktop manager nei OS a linea di comando.

    Per adesso mille grazie per questa interessante e stimolante discussione.

    Grazie, a presto.

    Ciao
    TheGrinch

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156
    Ciao e grazie a te!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.