2015-09-15 9 views
5

Ich entwickle eine Yii2 REST API, mit AngularJS für das Frontend zu konsumieren.Echtzeit mit AngularJs & Yii2

Ich brauche eine Möglichkeit, Echtzeit-Ansatz, z. für einen Chat oder um Echtzeit-Benachrichtigungen zu erstellen.

Ist dies möglich, wie zu erreichen? Ich habe über Ratchet, Socket.io und einige andere Dinge gelesen, aber ich konnte nicht herausfinden, wie man sie für REST fit machen kann oder ob das der richtige Weg ist.

Jeder Rat würde zu schätzen wissen.

+3

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

+0

Also, ist es möglich, die gleiche REST API über eine _ ** "Websocket Ressource" ** _? Wie man? – arosgab

+0

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

Antwort

0

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.