Sie haben hier ein paar Optionen.
Kurz/Lang Polling (Verwendung SetTimeout)
app.controller("MyController", function($scope, $timeout, $http) {
$scope.messages = [];
$timeout(callAtTimeout, 3000);
function callAtTimeout() {
console.log("Timeout occurred");
$http.get('PATH TO RESOURCE TO GET NEW MESSAGES').then(
function(res) { // update $scope.messages etc... },
function(err) { // handle error }
);
}
});
Für kurzes und langes Polling auf Client-Seite, senden Sie Anfrage, warten Sie eine Antwort zurück zu bekommen, wartet dann 3 Sekunden und wieder Feuer.
Kurz/Lang-Abfrage funktioniert auf der Serverseite anders. Kurzes Polling gibt sofort eine Antwort zurück - ob sich etwas geändert hat oder nicht. Bei langem Polling halten Sie die Verbindung offen und bei einer Änderung geben Sie die Daten zurück. Hüten Sie sich davor, zu viele Verbindungen offen zu halten. entweder so etwas wie node.js auf Ihrem eigenen Web-Server oder eine gehostete Lösung wie Firebase
Socket.io (WebSockets)
würde ich empfehlen, dass Sie WebSockets implementieren.
Die Sache mit Firebase ist, dass Sie von PHP aus eine Postanforderung an einen REST-Endpunkt auf dem Firebase-Server senden können. Ihr JavaScript kann sich mit diesem Endpunkt verbinden und auf Änderungen warten und das Dom entsprechend aktualisieren. Es ist möglicherweise das einfachste von allen zu implementieren.
Ich persönlich würde PHP nicht für Socket-Programmierung verwenden, aber es kann getan werden.
Eine REST-API kommuniziert über HTTP, und die Kommunikation in Echtzeit erfolgt meist über WebSockets (mit Fallbacks auf HTTP, aber das wird in guten Frameworks wie Socket.io transparent gemacht). Die beiden sind grundlegend verschieden. Nichtsdestotrotz gibt es keinen Grund, warum Sie keine HTTP-REST-Endpunkte und keinen WebSockets-Endpunkt in derselben Anwendung haben können. –
Also, ist es möglich, die gleiche REST API über eine _ ** "Websocket Ressource" ** _? Wie man? – arosgab
Eine REST-API verwendet per Konvention HTTP-Anforderungsmethoden ('POST' /' PUT'/'DELETE' /' PATCH'), um den Typ der angeforderten Operation anzugeben (Lesen/Schreiben/Löschen/Aktualisieren). Dies gilt natürlich nicht für WS. Sie können einen WS-Listener schreiben, der Ereignisse mit einer Eigenschaft "type" oder "method" akzeptiert und auf Entitäten operiert. Beachten Sie, dass dieses Design die REST-Architektur in mehrfacher Hinsicht verletzt und aus Kundensicht schwieriger zu verwenden ist. –