2016-08-05 64 views
0

Der Titel ist ein wenig verwirrt, aber mein Problem ist:
Javascript eine AJAX-Anfrage an den PHP-Controller. Im PHP-Controller wird ein Thread erstellt und gestartet. Der Code ist:PHP Thread zu JavaScript zu sagen, die schlafen werden

public function run() { 
    while(true) { 
     //Do Something... 
     //Know I want to tell Javascript that I have done the thing and I'm going to sleep. 
     sleep(10000); 
    } 
} 

So ist der JavaScript-Code ist:

$.ajax({ 
type: 'POST', 
url: "controllers/DatabaseController/", 
data: dataObject, 
success: function(response) { 
    //Do Something after the Thread Result 
} 
}); 

Ich denke, dass dieses Problem ist es unmöglich, ... Weil der Faden läuft und Schlaf nach einer vom Kunden eingestellten Zeit. Und wenn der Thread ausgeführt wird, muss die Clientseite die Ergebnisse des Threads anzeigen.

Wie kann ich das tun? Das Javascript muss in einer Schleife wie der PHP Thread sein?

Die Situation ist:
- Gewinde tun Abfrage des Status Ausrüstung und nach, dass der Javascript, um die Statussymbole ändern (grün oder rot) der Geräte.

+0

Dieses Skript wird nicht beendet, so dass der js-Erfolg: Aufruf nie aufgerufen wird. Vielleicht ist es mit einer Ajax-Anfrage möglich, etwas mit Teildaten zu machen, da bin ich mir nicht sicher. – sietse85

+0

Mein Vorschlag ist nicht php Code schlafen lassen nur eine Schlafzeit Nummer echo ($ sleeptime) und setTimeout (fn, sleeptime) erneut anfordern. – phper

+0

er könnte auch einen kleinen Server mit php, der die Ein-Aus-Informationen für alle Geräte in assoziative Array hält und dann schnell auf alle eingehenden Ajax Anrufe – sietse85

Antwort

0

Lösung: ich die JavaScript-Funktion setInterval mit der eingestellten Zeit, dass die Benutzer verwendet, der läuft eine Funktion, die eine AJAX-Anfrage an den PHP-Controller stellt.
Der Controller erstellt einen Thread, der die Abfrage der Geräte und sterben.

0

Was können Sie tun, ist:

zwei Controller-Methoden erstellen: Eine der Thread den anderen starten Sie den Status der es zu überprüfen.

Sie machen Ihre Ajax-Anfrage, um den Thread zu starten. Sobald der Thread gestartet wurde, geben Sie eine Antwort mit einer Erfolgs-/Fehlermeldung zurück.

Wenn der Thread erfolgreich gestartet wurde, führen Sie regelmäßig eine zweite Ajax-Anforderung aus, um den Status des Threads zu überprüfen.

Sie können auch beim ersten Anruf die erwartete Zeit zurückgeben, die der Thread schlafen wird, damit Sie die Zeit einstellen können, in der die zweite Ajax-Anfrage gestellt wird.

bearbeiten (versucht zu klären):

Lasst uns sagen, dass Ihre Thread wird überprüfen, wie viel Kraftstoff der Maschine hat. Dieser Thread fragt den Computer ab und speichert diesen in einer Datenbank. Die zweite Methode im Controller fragt die Datenbank ab und ruft die vom Thread gespeicherten Ergebnisse ab.

Beispiel:

Controller:

class Controller 
{ 
    public function startThread() 
    { 
     // start thread 

     // return 
    } 

    public function checkStatus() 
    { 
     // query database for status 

     // return results 
    } 

    public function thread() 
    { 
     // check for machines status 

     // save the results into database 
    } 
} 

Javascript:

$.ajax({ 
type: 'POST', 
url: "controller/startThread/", 
data: dataObject, 
success: function(response) { 
    // if success 
    setTimeout(function() { 
     $.ajax({ 
     type: 'POST', 
     url: "controller/checkStatus/", 
     data: dataObject, 
     success: function(response) { 
      // your result will be here 
     }) 
    }, 10000) 
} 
}); 
+0

Das Problem ist, dass die Rückantwort nur kommen, wenn der Thread fertig ist. Wenn ich den Thread ausschließe, wird die Antwort nicht angezeigt ... – BackSpace

+0

warten Sie nicht, bis der Thread eine Antwort zurückgibt. Sie erstellen den Thread und geben eine Antwort zurück. Dann überprüfen Sie den Status mit dem zweiten Anruf. – flipjms

+0

Sorry, aber ich bin ein wenig verwirrt ... Der Thread wird erstellt und gestartet und gibt eine Antwort zurück. Es bedeutet also, dass das erste Polling durchgeführt wird und mit Erfolg zu Javascript zurückkehren. Das Javascript ändert die Icons und was ist mit der nächsten Iteration von thread? Ich verstehe nicht, was Sie mit dem "überprüfen Sie den Status des Threads" meinen. Sorry, aber ich bin ein Neuling mit PHP-Threads – BackSpace