Hai alcune opzioni qui.
Breve Polling/Long (uso 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 }
);
}
});
Per entrambi polling breve e lungo il lato client, si inviano richiesta, attendere per ottenere una risposta indietro, quindi attendere 3 secondi e il fuoco di nuovo.
Il polling lungo/lungo funziona in modo diverso sul lato server. I sondaggi brevi restituiranno immediatamente una risposta, indipendentemente dal fatto che qualcosa sia cambiato o meno. Lungo polling, si tiene aperta la connessione e quando si verifica una modifica, si restituiscono i dati. Fai attenzione a tenere troppe connessioni aperte.
Socket.io (WebSockets)
vi consiglio di implementare WebSockets utilizzando sia qualcosa di simile node.js sul proprio server web o una soluzione hosted come Firebase.
La cosa con Firebase è quella di PHP, è possibile inviare una richiesta di posta a un endpoint REST sul server Firebase. Il tuo javascript può connettersi a quell'endpoint e ascoltare le modifiche e aggiornare di conseguenza dom. È forse il più semplice di tutti da implementare.
Personalmente non userei PHP per programmare socket ma è possibile farlo.
Un'API REST comunica su HTTP e la comunicazione in tempo reale viene eseguita più spesso su WebSockets (con fallback su HTTP, ma è resa trasparente in framework validi come Socket.io). I due sono fondamentalmente diversi. Detto questo, non vi è alcun motivo per cui non si possano avere endpoint HTTP REST e un endpoint WebSockets nella stessa applicazione. –
Quindi, è possibile avere la stessa API REST su una _ ** "risorsa websocket" ** _? Come? – arosgab
Un'API REST per convenzione utilizza i metodi di richiesta HTTP ('POST' /' PUT'/'DELETE' /' PATCH') per specificare il tipo di operazione richiesta (lettura/scrittura/cancellazione/aggiornamento). Questo ovviamente non si applica al WS. È possibile scrivere un listener WS che accetta eventi contenenti una proprietà "type" o "method" e opera sulle entità. Si noti che questo design viola l'architettura REST in diversi modi ed è più difficile da usare dal punto di vista del cliente. –