Senden von Daten vom server zum client?

Ich habe eine php-Datei-server-und eine client-HTML-Datei, die HTML-Datei senden, ajax Anfragen an den server zum abrufen von Daten jeder 500 ms diese zwar wie erwartet funktioniert, es verursacht hohe Auslastung von Speicher und CPU-Auslastung auf dem client-Gerät.

PHP

if(isset($_POST['id']) && $_POST['id'] != '' )
{
    $id     = $_POST['id'];
    $select = $con->prepare("SELECT * FROM data WHERE id=?");
    $select->bind_param('s', $id);
    $select->execute();
    $result = $select->get_result();
    while($row = $result->fetch_assoc())
    {
        echo $row['column 1'] . "\t" . $row['column 2'] . "\n";
    }
}

AJAX

function send(){
    var formdata = new FormData(),
        id       = document.getElementById('id').value;
    formdata.append('id', id);
    var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
    xhr.open('post', 'server.php', true);
    xhr.send(formdata);
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4 && xhr.status == 200){
            console.log(xhr.responseText);
        }
    }
}
setInterval(function(){send()}, 500); 

Ich möchte finden, eine alternative Lösung zu ajax, anstatt zahlreiche Anfragen an den server und das abrufen von gleichen Daten die meisten der Zeit, es wäre viel effizienter, wenn der server Kontakt mit dem client auf die Daten zu ändern oder zu aktualisieren.

Kann ich nicht verwenden, PHP Socket oder HttpRequest medthods, da Sie nicht installiert auf meinem hosting-server, und ich bin mir nicht sicher, ob das später funktioniert. Die einzige Möglichkeit, die mir einfällt, ist mit SESSIONS.

laut diese PHP-server speichern alle Benutzer-Sitzungen auf das gleiche Verzeichnis auf dem server, daher kann es möglich sein, das zu ändern-sessions-Variablen für einen bestimmten Benutzer direkt auf die Datei. das problem ist jedoch, die Daten in diesen Dateien serialisiert werden und ich bin mir nicht sicher, wie Sie Sie zum de-serialisieren der Daten und re-serialisieren und speichern Sie dann die neuen Daten!

Selbst wenn ich in der Lage war, einen Weg zu finden, um Shop-updates auf die session-Datei, ich muss noch mit setInterval hören den session Variablen ändern sich jedes 500ms es ist zwar nicht ideal, aber es wäre viel besser, als mit XMLHttpRequest im Bezug auf Speicher und CPU-Auslastung.

Also, was ist der beste Weg, dies zu tun? jede Hilfe wäre sehr geschätzt werden.


UPDATE:

Erkannte ich, dass SESSION wird nicht funktionieren, weil es kann nur gelesen werden, indem der server den client nicht, deshalb habe ich das senden der ajax-Anfrage an den server, um die Variablen, die ich versucht habe, zu vermeiden.

Ich habe versucht, long-polling, aber ich hatte viele Probleme mit ihm, flush und ob_flush() funktioniert nicht auf meinem server und ich kann es nicht ändern, die ini Einstellungen. Wenn Sie versuchen, die endlos-Schleife, die ich nicht bekommen kann es zu brechen, auf Daten ändern:

if(isset($_GET['size']) && $_GET['size'] != '')
{
    $size = (int)$_GET['size'];
    $txt = "logs/logs.txt";
    $newsize = (int)filesize($txt);    
    while(true) {
        if($newsize !== $size) {
            $data = array( "size" => filesize($txt), "content" => file_get_contents($txt));
            echo json_encode($data);
            break;
        }
        else{
            $newsize = (int)filesize($txt);
            usleep(400000);
        }
    }

}

es läuft weiter und weiter, auch wenn die logs.txt Erhöhung der Größe wird es nicht brechen! wie kann ich es machen Pause und echo-Daten zu Größe steigern?

UPDATE 2:

es stellte sich heraus das php-cache die Dateigröße beim Aufruf filesize() Methode daher die obige Schleife wird auf unbestimmte Zeit laufen, ist die Lösung dafür ist die Verwendung clearstatcache() Methode wich löschen der gespeicherten cache die Größe der Datei, so dass die Schleife zu brechen, auf die Dateigröße ändert.

  • Wie Häufig erwarten Sie, dass Ihre response-Daten zu ändern?
  • es schwankt, könnte es sein, einmal alle 10 Sekunden oder einmal alle 10 Minuten
  • wie groß ist die Ergebnismenge? in kb?
  • Wie schnell sollte der Kunde pick-up-änderungen an Daten? Wie viele Sekunden ist akzeptabel?
  • Ja, ich habe Fragen über die Häufigkeit der Daten-Updates, da polling jede halbe Sekunde scheint ziemlich extreme.
  • die Anforderung ist klein in der Größe weniger als 1kb, @Kami die user erhalten sollten, die updates so schnell wie möglich

InformationsquelleAutor razzak | 2013-04-18
Schreibe einen Kommentar