Nodejs/socket.io/mongodbを使用してリアルタイムのWebアプリケーションを作成する方法について考えてきました。このアイデアは、ページで編集されたオブジェクトがすべてのクライアントブラウザーで出力および再レンダリングされるGoogleドキュメントに非常に似ています。
これを行うための最善の方法は何ですか?私が読んだことから、私は3つの方法を考えることができます:
Mongodbコレクションに「リスナー」を追加し、コレクションに変更が加えられるたびにページの一部を再レンダリングします(cons:slow?)
Mongodbデータをjsonファイルに取得し、fsを使用して編集し、mongodbに保存し、完了したらjsonを削除します(短所:データベースと実際のアプリの間に余分なレイヤーが必要です)
保存せずにレンダリングし、すべての変更が行われた後にのみ保存します(cons:ファイルはおそらくすべてのブラウザーで正しくレンダリングされません)
これを達成するためのより良い方法はありますか? (とにかくGoogleドキュメントはどのように機能しますか?)誰でも提供できるヘルプを本当に感謝します!
昨年、リアルタイムアプリを構築しました。基本的には、作成者が要素(テキスト、画像、ビデオなど)を追加/削除/編集できる同じページで作業するためのツールです。
使用したのは:
そして、正直なところ、それがどれほど速いかはとても素晴らしいことです。
これは、面倒なことやドキュメントをデータベースに保存することなく簡単に解決できます。ドキュメントの場所のみを保存する必要があります。 Nodeには、この種のアプリケーション用に構築されたいくつかの非常に素晴らしい機能があります。これらのトピックを調べることをお勧めします。
EventEmitters
ストリーム
Nodeファイルシステムには、ドキュメント用にこれを構築するために使用できるクラスがあります。
Socket.ioを使用して、これらのイベントをクライアントアプリケーションにフックできます。
私はオプション1と3を使いますが、わずかな違いがあります。 1. mongoDB opLogをtailする最初のオプションは適切ですが、アプリが何百万ものトランザクションを作成するDBでオーバーヘッドが非常に大きくなります。 meteorJSライブラリはすでにこれを行っており、独自のサービスを作成するよりも、使用するために成熟し安定しているため、それらを探索できます。
これを行う場合、おそらくブレンドを使用します。 Redisまたはrabbitmqを使用してsocket.io接続リストを管理し、パブリッシュとサブスクライブの動作を可能な限り迅速に取得します。タイマージョブは、ドキュメントの書き込みを長期的に永続化するために定期的にmongodbにフラッシュします。必要に応じてRedisで。
「共同ドキュメント編集アプリケーションの構築」は、実際には「Mastering Node.js」という本の章です。彼らは使用します:
ShareDBは、JSONドキュメントのOperational Transformation(OT)に基づくリアルタイムのデータベースバックエンドです。これは、DerbyJS Webアプリケーションフレームワークのリアルタイムバックエンドです。 https://github.com/share/sharedb
Wavesは、シームレスで低遅延の同時変更を可能にする、ホストされた構造化文書です。このライブエクスペリエンスを提供するために、Google Waveは同時実行制御のOperational Transformation(OT)フレームワークを使用します。 https://svn.Apache.org/repos/asf/incubator/wave/whitepapers/operational-transform/operational-transform.html
Quillは、互換性と拡張性のために構築された最新のWYSIWYGエディターです。 https://github.com/quilljs/quill
WebSocketおよびwebsocket-json-stream
完全なソースコードのGitHubリポジトリ: https://github.com/PacktPublishing/Mastering-Node.js-Second-Edition/tree/master/Chapter06/sharedb
また、MongoDBは最近、Apacheでのデータストリーミングに関するホワイトペーパーを公開しましたKafka=リアルタイム機能を実現するために: https://webassets.mongodb.com/kafka_and_mongodb.pdf