5

ノートを管理するためのWebアプリケーションを作成します(Evernoteに似たものを考えてください)。Backbone.js+JQueryクライアント側を使用することにしました。サーバー側では、まだ決めていません。純粋なPHP(私がよく知っている)またはNode.js + Socket.io(まったく新しい)のどちらかです。

私はNode.js+Socket.ioを検討しています。これは、Webアプリケーションをリアルタイムにしたいためです(つまり、ユーザーがメモを更新すると、ページをリロードせずに、そのメモを共有する共同編集者のためにそのメモが即座に更新されます。 )。

また、3番目の選択肢として、UIにNode.jsとSocket.ioを使用し、REST APIにPHPを使用することを検討していました(PHPを使用してAPIを構築する方が快適です)。PHPとJavascriptのコードはMongoDBデータベースを共有します。

私の質問はこれです:PHPを使用してWebアプリケーション用のREST APIを開発し、ユーザー用の新しいメモがAPIを介して作成された場合(つまり、Androidアプリがそのメモを作成するためのAPIリクエストを送信する場合)、Node.jsはSocket.itとBackbone.jsは、ユーザーのUIを即座に更新し、画面に新しいメモを表示できますか?それは「プッシュ通知」とも言えると思います。

私は十分に明確だったと思います。

また、リアルタイムWebアプリケーションを構築するための代替の優れたテクノロジーはありますか?

4

2 に答える 2

9

はい、Node.js + Socket.IO はこれをうまく処理します。ノードはイベントループを使用します。これは、リクエスト時にキューに入れられることを意味します。ノードはこれらのリクエストを 1 つずつ処理します。従来の Web サーバーは、その要求を処理するためにスレッドが作成される「要求ごとのスレッド」アプローチを処理します。

ここでのノードの利点は、頻繁にコンテキストを切り替える必要がないことです。これは、これらのリクエストを非常に迅速に処理できることを意味します...おそらく PHP サーバーよりも高速です。ただし、ノードは単一の CPU コア上で単一のプロセスとして実行されます。アプリケーションが CPU を集中的に使用する場合、アプリケーションがブロックされる可能性があります。つまり、各リクエストの時間が遅くなります。

ただし、あなたのアプリケーションは CPU を集中的に使用していないように思えます。つまり、Node.js はうまく機能します。

決断 時間が限られており、新しいスキル (ノード) を習得したくない場合は、PHP で十分です。時間があれば、Node.js を学習することをお勧めします。Notes を作成するための REST API など、I/O 集中型のタスクに関しては Node.js が非常に強力であるためです。

UI の更新 モバイル デバイスで使用する場合は、WebSocket を使用することをお勧めしますが、ロング ポーリングなどのフォールバックを用意することをお勧めします。Node または PHP を使用してクライアント UI を更新することができます。ただし、私の経験からすると、Node.js で Socket.IO を使用する方がはるかに簡単です。

例 Node.js / Socket.io を使用してクライアントを更新する

クライアント側

  socket.on('new-note', function (data) {
    placeNewNote(data);
  });

サーバ側

socket.emit('new-note', data);

Node.js を使い始める: Node.js を使い始めるにはどうすればよいですか?

また、WebSocket を使用するネイティブの Android モバイル アプリを構築する場合は、以下を使用する必要があります: Java socket.io クライアント

于 2012-05-10T09:48:37.737 に答える
2

もちろん、Web サーバーとプッシュ サーバーの両方に Node.js を使用するのが最善の方法です。特に、とにかく Node.js を使用する場合はそれを学ぶ必要があるため、Web サーバーの作成方法を学ぶことは自然なことです (最も有名なExpress フレームワークを使用することをお勧めします)。

これで、PHP を Web サーバーに、Node.js をプッシュ サーバーに使用できるようになりました。それらが相互に通信できるようにするには、アプリケーションにRedisを追加することをお勧めします。Redis を使用すると、PHP サーバーや Node.js プッシュ サーバーなど、Redis に接続されている任意のクライアントに通知をプッシュすることができます (また、拡張性にも優れています)。その時点から、プッシュ サーバーはデータをさらにクライアントのブラウザにプッシュします。

代替技術は、たとえばTwisted serverです。もちろん、それを使用するには Python を学習する必要があります。また、WebSockets を正しくサポートしているかどうかもわかりません。Node.js + socket.io に固執する必要があると思います。

于 2012-05-10T09:51:50.640 に答える