2015-09-15 20 views
5

Sto sviluppando un'API REST Yii2, con AngularJS per il frontend da consumare.In tempo reale con AngularJs e Yii2

Ho bisogno di un modo per attuare un approccio in tempo reale, ad es. per una chat o per fare alcune notifiche in tempo reale.

E 'possibile, come ottenere? Ho letto di Ratchet, Socket.io e alcune altre cose, ma non sono riuscito a capire come renderle compatibili per REST o se questa è la strada da percorrere.

Qualsiasi consiglio sarebbe gradito.

+3

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. –

+0

Quindi, è possibile avere la stessa API REST su una _ ** "risorsa websocket" ** _? Come? – arosgab

+0

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. –

risposta

0

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.