Gestione ricezione dati da socket e polling

  • Creatore Discussione Creatore Discussione k-it
  • Data di inizio Data di inizio

k-it

Utente Attivo
14 Ott 2009
30
0
0
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
 
Per riaggiornare la pagina puoi scegliere tra varie opzioni:

Se ti interessa aggiornare solo una quota parte della pagina conviene AJAX
viceversa se vuoi aggionrare la pagina intera è sufficiente utilizzare il tag di html del refrehs della pagina:
PHP:
<meta http-equiv="refresh" content="600">

Ciao
Ciro
 
lotus, guarda che se non sbaglio l'header refresh prende come contenuto il numero di secondi dopo i quali si aggiorna la pagina. Con il tuo esempio si aggiorna ogni 600 secondi...

Comunque potresti anche aprire un popup che poi aggiorni e di cui modifichi i dati con Javascript, ma non è semplicissimo.
 
Alessandro, il mio è un esempio, 600 è il primo valore che ho
pensato...è ovvio che l'attributo va valorizzato in base alle esigenze...
 
Per riaggiornare la pagina puoi scegliere tra varie opzioni:

Se ti interessa aggiornare solo una quota parte della pagina conviene AJAX
viceversa se vuoi aggionrare la pagina intera è sufficiente utilizzare il tag di html del refrehs della pagina:
PHP:
<meta http-equiv="refresh" content="600">

Ciao
Ciro

Non so cosa mi permette di fare ajax perchè non lo conosco ma se mi dici che mi può aiutare in questo me lo studio un po'
 
lotus, guarda che se non sbaglio l'header refresh prende come contenuto il numero di secondi dopo i quali si aggiorna la pagina. Con il tuo esempio si aggiorna ogni 600 secondi...

Comunque potresti anche aprire un popup che poi aggiorni e di cui modifichi i dati con Javascript, ma non è semplicissimo.

In effetti ho fatto così ma non mi funziona molto bene, ho messo la parte javascript nel ciclo ma la finestra popup si aggiorna solo ogni tanto (ho contato all'incirca 35 secondi) mentre le informazioni via socket e quindi il ciclo arriva ogni secondo (avendo messo una sleep(1) sul server)
 
Hai provato ad usare il metodo che ha suggerito lotus con valore 1 nella finestra pop-up che viene aperta? Dovrebbe aggiornartela regolarmente ogni secondo, no? L'unico problema è che diventa illeggibile, quindi ti consiglio di impostare 5-6 secondi.
 
Hai provato ad usare il metodo che ha suggerito lotus con valore 1 nella finestra pop-up che viene aperta? Dovrebbe aggiornartela regolarmente ogni secondo, no? L'unico problema è che diventa illeggibile, quindi ti consiglio di impostare 5-6 secondi.

Così però non risolvo perchè nella finestra madre ho un ciclo che ogni secondo riapre la stessa finestra quindi aggiornandola, quindi è inutile aggiornare quella di popup.Se aggiornassi quella dovrei allora avere un posto dove appoggiare i dati, ad esempio alla finestra madre glieli faccio scrivere nel database e il popup li leggi ogni secondo aggiornando, come dice lotus, la finestra.
 
Come dice giustamente alessandro puoi utilizzare il cookies.

Ma di che mole di dati parliamo?

La soluzione dei cookies è praticabile purchè i dati siano pochi..

Quanti dati vengono gestiti?
Scusami non potresti gestire tramite db o xml?
 
Come dice giustamente alessandro puoi utilizzare il cookies.

Ma di che mole di dati parliamo?

La soluzione dei cookies è praticabile purchè i dati siano pochi..

Quanti dati vengono gestiti?
Scusami non potresti gestire tramite db o xml?

Ho usato il database, scrivo li quello che mi arriva e lo leggo dove mi serve.
Una domanda: ho in una pagina il client che con un ciclo while controlla sempre nel canale i dati da leggere e li invia al database, come faccio a fermare il ciclo e chiudere la connessione da parte client?
 
Immagino che tu utilizzi le funzioni della famiglia fsockopen per gestire il socket, quindi puoi usare fclose come se fosse un normale file di testo.

Si la funzione per chiudere la conosco ma non trovo il modo per farla partire, cioè dovrei mandare un comando da parte del server che fa uscire dal while ma se la voglio chiudere dalla parte del client? non mi viene l'idea di quale condizione usare nel while per farlo uscire controllandolo da client
 
Che tu la chiuda dal client oppure dal server ha poca importanza, in ogni caso la connessione viene interrotta, non so se mi spiego. Oppure ho capito male io?

si si quello lo so, il problema che ho è il modo in cui farlo chiudere al client perchè il client è bloccato in un ciclo while(true) che legge in continuazione quello che gli arriva dal canale, dovrei mettere una condizione nel while che quando si verifica esce dal ciclo e chiudo la connessione.Potrei farlo facendo inviare un comando da parte del server, ad esempio una stringa con scritto "exit" ricevuta quella il client chiude, ma il mio problema è se volessi che fosse il client a decidere quando chiudere la connessione non so che condizione mettere nel while.
Ad esempio mi servirebbe che al clic di un pulsante su una finestra potessi chiudere la connessione, ma non so se si possa fare
 

Discussioni simili