2015-09-15 5 views
5

フロントエンド用にYii2 REST APIを開発しています。AngularJs&Yii2を使用したリアルタイム

私はリアルタイムアプローチを実装する方法が必要です。チャットのために、またはリアルタイムの通知を行うことができます。

これは可能ですか、達成する方法はありますか?ラチェット、Socket.io、その他いくつかのことについて私は読んでいましたが、RESTのために一緒にフィットさせる方法や、これが行く方法であるかどうかはわかりませんでした。

アドバイスはありがたいです。

+3

REST APIはHTTPを介して通信し、リアルタイム通信はWebSocket(HTTPのフォールバックを使用しますが、Socket.ioなどの優れたフレームワークで透過的に行われます)で行われることが最も一般的です。 2つは基本的に異なっています。つまり、HTTP RESTエンドポイントとWebSocketsエンドポイントを同じアプリケーション内に持つことはできません。 –

+0

したがって、同じREST APIを_ ** "websocketリソース" ** _に設定することは可能ですか?の仕方? – arosgab

+0

REST APIは、HTTP要求メソッド( 'POST' /' PUT'/'DELETE' /' PATCH')を使用して、要求される操作のタイプ(読み書き/削除/更新)を指定します。もちろんこれはWSには当てはまりません。 「タイプ」または「メソッド」プロパティを含むイベントを受け入れ、エンティティで動作するWSリスナを記述することができます。このデザインはRESTアーキテクチャに複数の点で違反しており、クライアントの観点からは使いにくいことに注意してください。 –

答えて

0

ここにはいくつかのオプションがあります。

ショート/ロングポーリング(使用の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 } 
     ); 
    } 
}); 

、あなたはリクエストを送信し、戻って応答を得るために待つ、再度3秒と火を待ちます。

ショート/ロングポーリングは、サーバー側で異なる動作をします。短いポーリングは、何かが変更されたかどうかにかかわらず、すぐに応答を返します。ロングポーリング、接続を開いたままにして、変更があった場合はデータを返します。あまりにも多くの接続を開いたままにすることに注意してください。

Socket.io(WebSocketを)

私はあなたがあなた自身のウェブサーバーまたはFirebaseなどのホスト型ソリューションでのNode.jsのようなもののいずれかを使用して、WebSocketをを実装することをお勧めします。

PHPからFirebaseサーバーのRESTエンドポイントにポストリクエストを送ることができます。あなたのjavascriptは、そのエンドポイントに接続し、変更をリッスンし、それに従ってDOMを更新することができます。おそらく実装するのが最も簡単です。

私は個人的にはソケットプログラミングにPHPを使用しませんが、それはできます。

関連する問題