2012-04-01 11 views
1

I Herzschlag alsLange ziehen PHP & AJAX - Server Performance

$.ajax({ 
    cache:false, 
    timeout:8000, 
    type:"POST", 
    url:"someurl.php", 
    data:allFormValues, 
    error:function(){ alert("some error occurred") }, 
    success:function(response){ //call some functions } 
    }); 

folgende implementiert und in der Server-Seite

$time = time(); 
     while(!proccessServer() && (time() - $time) < 60) 
     { 
      sleep(5); 
     } 

und es ist einfach eine Funktion aufrufen, wenn es die Schleife false zurück schlafen für weitere 5 Sekunden und dann überprüfen Sie aber das Problem ist, dass dieses Ding meine Ressourcen CPU und das war nur, wenn 5 Benutzer es testen

habe ich vor diesem

window.setInterval(function(){ 
    //I call a function here 
}, 5000); 

aber es war das Essen der Ressourcen auch wegen der vielen Anfragen

und vielleicht meine app 100K online zur gleichen Zeit haben, auch ich nicht über die Verwendung von WebSockets denke, da der Browser Kompatibilität Was schlagen Sie vor, um das zu lösen? keine Hilfe wird geschätzt

Antwort

2

Ihr Webserver (Apache?) Verwendet einen Thread, bis die Anfrage abgeschlossen ist, was Ressourcen verbraucht. UND Sie verwenden einen PHP-Prozess für jeden Besucher, warten nur. PHP ist für solche Lösungen nicht sehr geeignet. Sie sollten sich andere Technologien ansehen, wenn Sie Comet machen wollen. Zum Beispiel node.js.

Sie könnten auch zu NGiNX als Webserver wechseln, und verwenden Sie NGiNX_HTTP_Push_Module von http://pushmodule.slact.net/ für Ihre Anwendung, und bleiben Sie dann mit PHP. NGiNX akzeptiert dann die Verbindung von Ihrem Besucher und wartet dann darauf, dass Ihr Code Daten an NGiNX sendet. Es könnte für Sie funktionieren, abhängig davon, was genau Sie tun möchten.

1

Das Problem hier ist, dass Sie den Server schlafen lassen und erneut versuchen. das ist selbst ressourcenintensiv. Benutze es weise.

Sie sollten den Server in längeren Intervallen abfragen und den Server mit einem Status wie "done" oder "fail" antworten lassen. Danach lasse JS die Antwort bestimmen und wiederhole es - nicht PHP.


alternativ können Sie die neuen HTML5 sockets so verwenden, dass Sie eine permanente Zwei-Wege-Verbindung vom Client zum Server. Der Server kann neue Inhalte an den Client senden, ohne dass der Client jedes Mal danach fragt.