web-dev-qa-db-ja.com

mongodbとnodejsを使用したリアルタイムWebアプリ

Nodejs/socket.io/mongodbを使用してリアルタイムのWebアプリケーションを作成する方法について考えてきました。このアイデアは、ページで編集されたオブジェクトがすべてのクライアントブラウザーで出力および再レンダリングされるGoogleドキュメントに非常に似ています。

これを行うための最善の方法は何ですか?私が読んだことから、私は3つの方法を考えることができます:

1)mongodb oplogの使用

Mongodbコレクションに「リスナー」を追加し、コレクションに変更が加えられるたびにページの一部を再レンダリングします(cons:slow?)

2)ローカルJSONを使用する

Mongodbデータをjsonファイルに取得し、fsを使用して編集し、mongodbに保存し、完了したらjsonを削除します(短所:データベースと実際のアプリの間に余分なレイヤーが必要です)

3)純粋にsocket.ioを使用する

保存せずにレンダリングし、すべての変更が行われた後にのみ保存します(cons:ファイルはおそらくすべてのブラウザーで正しくレンダリングされません)

これを達成するためのより良い方法はありますか? (とにかくGoogleドキュメントはどのように機能しますか?)誰でも提供できるヘルプを本当に感謝します!

17
Poh Zi How

昨年、リアルタイムアプリを構築しました。基本的には、作成者が要素(テキスト、画像、ビデオなど)を追加/削除/編集できる同じページで作業するためのツールです。

使用したのは:

  • Node.js、Hapi.jsフレームワーク(エクスプレスベース)
  • Socket.io
  • NoMongoDBが、代わりに素晴らしい RethinkDB があります。これはデフォルトでリアルタイムであり、基本的にリスナーを使用して、何かがあるときはいつでも通知しますかわった。 (mongoDBは私たちの意見を吸い込み、過去に使用したことがあり、「二度とない」ように感じますが、それは私たちの意見です)
  • React/Reduxは、変更された要素についてのみDOMを更新するために、Angularは、その両方の方法で、複数のユーザーが同じページを修正する可能性があるため、同時にすべての要素を再レンダリングすると、フォーカスが失われます。

そして、正直なところ、それがどれほど速いかはとても素晴らしいことです。

21
Vadorequest

これは、面倒なことやドキュメントをデータベースに保存することなく簡単に解決できます。ドキュメントの場所のみを保存する必要があります。 Nodeには、この種のアプリケーション用に構築されたいくつかの非常に素晴らしい機能があります。これらのトピックを調べることをお勧めします。

  • EventEmitters

  • ストリーム

Nodeファイルシステムには、ドキュメント用にこれを構築するために使用できるクラスがあります。

Socket.ioを使用して、これらのイベントをクライアントアプリケーションにフックできます。

3

私はオプション1と3を使いますが、わずかな違いがあります。 1. mongoDB opLogをtailする最初のオプションは適切ですが、アプリが何百万ものトランザクションを作成するDBでオーバーヘッドが非常に大きくなります。 meteorJSライブラリはすでにこれを行っており、独自のサービスを作成するよりも、使用するために成熟し安定しているため、それらを探索できます。

  1. Socket.ioを使用するオプション3。ネイティブの変更フィードをサポートするrethinkDBを使用している場合は、実際にsocket.ioを使用して変更を発行し、データベースに書き込むことができます。ネイティブの変更フィードは、リアルタイムで見たいテーブル/コレクションへの書き込みがあるたびに、古いデータと新しいデータを含むコールバックを提供し、そこでsocket.ioを使用してすべてのクライアントに公開できます。
  2. より堅牢なソリューションである別の方法は、Paulが前述したようにrabbitMQを使用することです。
2
Bala Abhinav

これを行う場合、おそらくブレンドを使用します。 Redisまたはrabbitmqを使用してsocket.io接続リストを管理し、パブリッシュとサブスクライブの動作を可能な限り迅速に取得します。タイマージョブは、ドキュメントの書き込みを長期的に永続化するために定期的にmongodbにフラッシュします。必要に応じてRedisで。

1
Paul

「共同ドキュメント編集アプリケーションの構築」は、実際には「Mastering Node.js」という本の章です。彼らは使用します:

また、MongoDBは最近、Apacheでのデータストリーミングに関するホワイトペーパーを公開しましたKafka=リアルタイム機能を実現するために: https://webassets.mongodb.com/kafka_and_mongodb.pdf

1
Jan