2012-12-30 3 views
10

私はAngular.jsとNode.jsの初心者ですが、リアルタイムアプリケーションを作成する方法は2つあります。最初はSocket.ioを使用し、もう1つはsetInterval()関数でRESTfulをクライアント側のソリューションとして使用しています。私は両方の選択肢を使って自分のアプリケーションを構築しましたが、なぜ他のものを使うのが良いのか分かりません。Angular.jsとNode.jsを使用してリアルタイムアプリケーションを構築するより良い方法はどれですか?

Angular.js(Socket.io代替)を使用して、私のコントローラ:

function MyController($scope, socket) { 

    socket.on('test', function(data){ 
    $scope.data = data; 
    console.log($scope.data); 
    }); 

} 

Angular.js(RESTfulな代替)を使用して、私のコントローラ:

function MyController($scope, $http) { 

    setInterval(function() { 
    $http.get('/test.json') 
     .success(function(data, status, headers, config) { 
      $scope.data = data; 
      console.log($scope.data); 
     }); 
    }, 1000); 

} 

これらの方法との違いは何でしょう物事をするの? ありがとうございます!

答えて

8

完全にリアルタイムのWebアプリケーションが必要な場合は、ソケットが必要です。 Socket.ioまたはSockJSは両方とも非常に優れたクライアントです。ウェブソケットがサポートされていない場合、それらは正常に機能を低下させる能力がありますが、使用する交通手段を選択することができます。

変更をすべてのユーザーに伝播させるには、データサブスクリプションサービスを構築する必要があります。 Tower.jsとMeteorはどちらも反応的なアプローチを採用しており、モデルの変更にイベントリスナーを使用しています。どのように複雑であるか、またはこの機能をどれぐらい強力にするかによって、利用可能な実装が異なります。

一度に接続された多くのユーザー間でクライアント側とサーバー側のデータを同期しようとすると、ますます複雑になります。私はあなたがそれらの2つのフレームワークを見て、それらがどのように動作し、おそらくその一部を複製するか、またはそのすべてが機能性であることを確認することをお勧めします。

2

あなたのケースではSocket.ioを使用する方が良いです。

あなたはバックエンドとのやりとりをたくさんしているように思えます。間隔でAPIを照会するのではなく、Socket.ioを使用するだけです。

ソケットを使用すると、バックエンドとクライアントの両方の作業が軽減され、イベントベースのものをより簡単に制御することができます。

3

プッシュ(Websocketを使用)とパブリッシュ/サブスクライブのリアルタイムイベントにAjaxを使用するPubnubの選択肢から選択する必要がありました。アプリケーションのさまざまなユーザー間でリアルタイムの通信を行おうとすると、Angular RESTfulの方法では不十分です。たとえば、チームによって使用されるプロジェクト管理アプリケーションがあります。 1人のチームメンバーがタスクを追加/更新している間に別のメンバーが同時に見ている可能性があります。更新プログラムを公開する必要があり、現在ログインしている他のすべてのユーザーが変更されたイベントに登録され、通知を受けることができます。

私たちはPubnubを使用してきましたが、プッシャーの技術は現在のところ優れていますが、現在サポートされていないブラウザでは非常に高速です。

私はAJとNodeJSが問題だと知っていますが、サードパーティのサブスクリプション/パブリッシングAPIを使用すると、nodejsサーバーと大きな負荷を管理する必要がないため、管理が簡単になります人気があります)。 Pusher/Pubnubはスケーラブルで、あなたが望む限りあなたのアプリケーションを拡大縮小することができます。

2

Socket.ioは、以下の利点を有する:

  • 以下不要TRAFICと
  • (おそらく)クリーナーコード

RESTは、これらの利点を有する

  • 低いレイテンシをレンダリング:

    • すべてのブラウザでサポートされていますそして、クライアント、クラスタ化されたプロキシとそうでない場合は、複雑なネットワークトポロジで
    • 少ないオープンな接続
    • がより良い作品

    これらの点のそれぞれは、それ自身で長い議論に値する、いくつかは、アプリケーションの特性に多くを依存しています。しかし、それらのタグを優先的にタグ付けすると、おそらくあなたのために何が最善のものかがわかります。

  • 6

    あなたのユースケースに基づいて、私はSocket.IOが行く方法だと思います。しかし、WebSocketsをAngularで使用する場合にはいくつかの注意点があります。しばらく前にこの件について書きましたブログ記事をご覧ください:http://briantford.com/blog/angular-socket-io.html

    関連する問題