Off-Topic > In piazza

Consiglio su flusso dati TCP e PHP

(1/5) > >>

rccrcc:
Sto sviluppando un progetto usando il php e mi sono bloccato, vediamo se qualcuno mi sa indirizzare sulla strada migliore da intraprendere.
Mi vengono inviati dei dati mediante socket TCP, temperatura, pressione ed altri parametri. Questi mi vengono spediti non a intervalli regolari, ma soltanto quando variano. Io vorrei salvare i dati in un db e visualizzarli in tempo reale.
Nessun problema per ricevere i dati e salvarli, il problema sta nel fatto che siccome il flusso dati è continuo, la pagina php continua ad elaborare e non mi visualizza i dati raccolti nel momento in cui arrivano. Come posso fare?


--- Codice: ---<?php
$ip ="127.0.0.1";
$porta = "9999";
$comando = "TEMPERATURA\n"; //comando per avviare l'invio dati
$fp = fsockopen($ip, $porta, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    fwrite($fp, $comando);
    while (!feof($fp)) {
        set_time_limit(0); //evita il timeout del server
        $dati= fgets($fp, 128);
        echo $dati."<br/>"; //stampo dati
        salva_dati(); //funzione con cui i dati vengono salvati
        }
    fclose($fp);
}
?>
--- Termina codice ---
;D

Daniele8787:
Non basterebbe fare due php, uno per salvare i dati nel db, e l'altro che li visualizza prendendoli dal db? ovviamente dovresti poi scrivere una funzione per il php principale, per fargli capire quando ci sono state delle modifiche al db, ancora da visualizzare. Per tale scopo si può usare il javascript, facendo fare una richiesta ogni 10 secondi ai file salvati contenenti il db, per vedere se ci sono cambiamenti. Nel caso ci siano, visualizza i nuovi dati. I software in php non possono restituire dati durante la loro esecuzione, ma solo quando si sono chiusi e hanno completato l'elaborazione (almeno credo). Penso che per te serva il javascript unito al php.

rccrcc:
Grazie del consiglio.
Speravo in una soluzione più "elegante" limitando gli accessi al db. Nella descrizione del problema ho semplificato al minimo il progetto, ma il flusso dati è piuttosto intenso, quindi diventerebbe problematico. Mi sa che dovrò indirizzarmi verso Java  ???

antonino.spampinato:
set_time_limit(0);
credo che il web server capisca senza limiti di tempo se il max_execution_time non è presente o configurato per non avere limiti di tempo.Inoltre sia apache che IIS hanno un tempo di esecuzione a 300 secondi http://www.php.net/manual/it/info.configuration.php#ini.max-execution-time
Prova impostando ad 1 secondo con cronjob e/o un programma cgi, visto che il web server è il tuo, e gira in locale.
ps. parlo da profano.

ciopper90:
alla fine che uno lo implementi in java alla fine la logica e la stessa di daniele visto che quello che bisogna fare e aggiornare la gui dopo aver aggiornato il db

Navigazione

[0] Indice dei post

[#] Pagina successiva

Vai alla versione completa