Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    46

    Gestione ricezione dati da socket e polling

    Ciao
    sto facendo un sistema (già abbozzato) in cui un client si collega al server e questo gli manda in continuo polling e un stringa con lo stato di alcuni sensori di una macchina.
    La gestione socket sembra funzionare:
    -ricevo i dati, li elaboro, li invio
    Il problema è come gestire al meglio i dati che mi arrivano dovrei:
    1) Visualizzare i dati ricevuti sotto forma grafica aggiornandoli di continuo (se lo faccio nella stessa pagina al momento mi ricrea ogni volta la tabella dove visualizzo i dati, pensavo di inviarli ad una finestra popup che si aggiorna ogni secondo)
    2) Permettere l'iterazione come chiusura connessione, invio stringa al server per attivare o meno un sensore.
    3) Invio risposta al polling (ack)
    Non so bene, soprattutto, come far riaggiornare in continuazione la pagina (o parte di pagina) dove visualizzo i sensori (arriva stringa, visualizza stato in base ai valori contenuti nella stringa)
    Ogni idea è ben accetta!
    Grazieeee

  2. #2
    Beh, direi che sono 2 situazioni diverse

    Ci sta un componente che non gira via web che riceve i dati ... puoi sempre scriverlo tramite php e usare la cli che comunica via socket, ricevendo i dati, e li scrive nel database e poi ci sta un componente che legge i dati, ad esempio dal database, e te li mostra a video

    Direi di partire a dare un occhio qua
    www.php.net/socket

    E guarda anche tra le pillole sul forum, ho scritto un pò di roba a riguardo ... sono vecchie ma come spunti vanno bene

    Per la visualizzazione a video ovviamente tramite browser puoi generare dei grafici, dai un occhio ad esempio alla libreria pChart, o più semplicemente mostrare del codice HTML che ti costruisca delle barre facendoti vedere lo stato.
    Se hai bisogno che queste "barre" si aggiornino in tempo reale puoi usare ad esempio ajax/ahah/json per leggere continuamente i dati aggiornati o ancora leggere, tramite un tag img, l'immagine inviata da una pagina php che invia anche un header di tipo refresh per forzare il browser a ricaricare l'immagine ogni tot secondi
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    46
    Originariamente inviato da daniele_dll
    Beh, direi che sono 2 situazioni diverse

    Ci sta un componente che non gira via web che riceve i dati ... puoi sempre scriverlo tramite php e usare la cli che comunica via socket, ricevendo i dati, e li scrive nel database e poi ci sta un componente che legge i dati, ad esempio dal database, e te li mostra a video

    Direi di partire a dare un occhio qua
    www.php.net/socket

    E guarda anche tra le pillole sul forum, ho scritto un pò di roba a riguardo ... sono vecchie ma come spunti vanno bene

    Per la visualizzazione a video ovviamente tramite browser puoi generare dei grafici, dai un occhio ad esempio alla libreria pChart, o più semplicemente mostrare del codice HTML che ti costruisca delle barre facendoti vedere lo stato.
    Se hai bisogno che queste "barre" si aggiornino in tempo reale puoi usare ad esempio ajax/ahah/json per leggere continuamente i dati aggiornati o ancora leggere, tramite un tag img, l'immagine inviata da una pagina php che invia anche un header di tipo refresh per forzare il browser a ricaricare l'immagine ogni tot secondi
    Ciao
    Grazie per la risposta allora:
    la parte socket già va bene, nel senso che ricevo i dati e mi ritrovo la stringa in una varibaile.
    Te dici che è meglio che la inserisco nel database? così però ogni secondo arriva una stringa aggiornata che riempirebbe inutilmente il database. A me basterebbe solamente visualizzarla. Ti spiego come ho fatto ora: mi arriva una stringa con ad esempio stringax101001 in base a questo leggo i primi 8 caratteri e li stampo come descrizione poi ogni singolo carattere mi identifica un sensore e con degli if-else apro o un'immagine di un pallino rosso se è 0 altrimenti verde se è 1. Cosi funzionerebbe solo che non so come fare per aggiornare solo la parte della pagina dove ho i pallini che raffigurano i sensori. Per ora ho una parte in php che fa il collegamento al server legge la stringa e poi la parte html che visualizza il contenuto della stringa, ma non posso aggiornare tutta la pagina perchè così dovrebbe rifare una connessione al server ogni volta.
    Ho provato a farlo aprire in un'altra finestra la visualizzazione e aggiornarla di continuo ma non mi funziona molto bene.
    Non conosco cosa si può fare con ajax se mi dici che può essere utile per questo me lo studio un po'.
    Grazie moltissime!

  4. #4
    beh, nel database tu invece di inserire riga per riga ... tieni solo l'ultima riga

    poi con la seconda pagina fai l'operazione

    cmq, se ti serve qualcosa di "real-time" decisamente php non è molto indicato, dovresti vedere di ripiegare su C# o simili
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    46
    Originariamente inviato da daniele_dll
    beh, nel database tu invece di inserire riga per riga ... tieni solo l'ultima riga

    poi con la seconda pagina fai l'operazione

    cmq, se ti serve qualcosa di "real-time" decisamente php non è molto indicato, dovresti vedere di ripiegare su C# o simili
    mmmm allora visto che il C lo conosco dovrei studiarmi il C#
    Usavo il php perchè devo fare poi varie operazioni col database, avere un interfaccia familiare (penso che più familiare del html non ci sia altro adesso), deve essere raggiungibile via rete e in ultimo perchè è quello che conosco meglio

  6. #6
    capito, il problema è che se devi aggiornare con estrema frequenza o, per meglio dire, in tempo reale ... php non è esattamente la scelta migliore
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    46
    Originariamente inviato da daniele_dll
    capito, il problema è che se devi aggiornare con estrema frequenza o, per meglio dire, in tempo reale ... php non è esattamente la scelta migliore
    Si in tempo reale ma neanche troppo, cioè mi basta che si aggiorni ogni secondo.
    Comunque sto pensando di fare come dicevi tu appoggiando i dati nel database, così mi divido per bene il lavoro delle due pagine e viene una programmazione fatta meglio, la prima pagina fa una cosa, la seconda un'altra ecc

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    46
    Originariamente inviato da daniele_dll
    capito, il problema è che se devi aggiornare con estrema frequenza o, per meglio dire, in tempo reale ... php non è esattamente la scelta migliore
    ho deciso di appoggiarmi al database e pare che funzioni.
    Non riesco a trovare un'idea per far fermare la pagina (client) che riceve i dati visto che gira in un while in continua, non so che condizione dare al while, ad esempio cliccando un pulsante su la pagina del visualizzatore mi dovrebbe chiudere la connessione socket ma posso farlo da un'altra pagina?
    Come si fa a chiudere una connessione quando questa si trova in un ciclo while (true) ?

  9. #9
    php è server e l'output viene interpretato dal browser sul client ... non ci può essere, in alcun modo, nessun tipo di iterazione diretta

    ovviamente ci sono dei workaround!

    per farti un esempio banale, se crei una pagina HTML e la invii senza però chiuderla con il body e poi nel while invii i dati puoi fare in modo che i dati, invece di essere semplice materiale da mostrare a video siano tag script contenenti codice javascript che si occupa di aggiornare dei campi appositi.

    Con questo giochino puoi fare una pagina graficamente accattivante che ti si aggiorni quasi in tempo reale.

    Per far interrompere il ciclo, semplicemente, metti nella parte di codice html che invii un link o un bottone che reindirizza l'utente verso un altra pagina (non so se c'è un metodo dell'oggetto window che termini la connessione [che so abort ... non so se esiste qualcosa del genere, ma dovresti chiedere su javascript])
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #10
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Lol ...

    Gia' decisamente un sistema in real time sarebbe meglio.

    Sta attento che c# e c sono due pianeti diametralmente opposti come linguaggi.
    Nel caso hai pure java che per gestire threading e connessioni e' una bombardata.

    Pensaci.

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.