10

私は Angular.js と Node.js の初心者ですが、リアルタイム アプリケーションを作成するには 2 つの方法があることに気付きました。1 つ目は Socket.io を使用する方法で、もう 1 つはクライアント側のソリューションとして setInterval() 関数を使用して RESTful を使用する方法です。両方の方法を使用してアプリケーションを作成しましたが、一方を使用した方がよい理由がわかりません。

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);

}

これらの方法の違いは何でしょうか? 前もって感謝します!

4

5 に答える 5

8

完全にリアルタイムの Web アプリケーションが必要な場合は、ソケットが適しています。Socket.io または SockJS はどちらも非常に優れたクライアントです。Web ソケットがサポートされていない場合は、正常に機能を低下させることができますが、使用する転送方法を選択できます。

すべてのユーザー間で変更を反映するには、データ サブスクリプション サービスを構築する必要があります。Tower.js と Meteor はどちらもリアクティブ アプローチを使用し、モデルの変更時にイベント リスナーを使用します。この機能がどれほど複雑であるか、またはどの程度強力であるかに応じて、利用可能な実装が異なります。

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

于 2012-12-30T13:25:01.240 に答える
6

あなたのユースケースに基づいて、Socket.IOが道だと思います。ただし、Angular で WebSocket を使用するにはいくつかの注意事項があります。少し前にこの件について書いたブログ投稿をご覧になることをお勧めします: http://briantford.com/blog/angular-socket-io.html

于 2012-12-31T17:55:36.070 に答える
3

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

私たちは Pubnub を使用しており、非常に高速に動作しますが、Pusher の技術の方が優れていますが、現在すべてのブラウザーでサポートされているわけではありません。

AJ と NodeJS に関する質問であることは承知していますが、サードパーティのサブスクリプション/パブリッシング API を使用すると、nodejs サーバーとより大きな負荷 (アプリが普及したとき) を管理する必要がなくなるため、管理が容易になると思います。Pusher/Pubnub はスケーラブルであり、アプリを必要なだけスケーリングできます。

于 2012-12-30T09:40:43.357 に答える
2

Socket.io には次の利点があります。

  • 不要なトラフィックとレンダリングの削減
  • 低レイテンシ
  • (おそらく) よりクリーンなコード

REST には次の利点があります。

  • すべてのブラウザとクライアントでサポート
  • 開いている接続が少ない
  • クラスタ化された、プロキシ化された、その他の複雑なネットワーク トポロジでより適切に機能します

これらの各点は、それ自体で長い議論に値しますが、アプリケーションの特性に大きく依存するものもあります。ただし、優先順位に従ってタグ付けすると、おそらく最適なものが表示されます。

于 2012-12-30T13:13:36.077 に答える
2

あなたの場合は Socket.io を使用することをお勧めします。

バックエンドと多くの対話を行っているように見えるためです。そのような場合は、間隔を置いて API をクエリする代わりに、Socket.io を使用してください。

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

于 2012-12-30T08:14:58.250 に答える