Meteorの内部的な仕組み

翻訳者からMeteorJS-オープン(MIT)フルスタックJavaScriptフレームワーク(クライアントとサーバーの両方)。 現在のバージョン0.6.6.3-バージョン1.0は2014年初頭にリリースされる予定です。 ハブの出版物: 1、2、3



この記事では、Meteorアプリケーションのネットワークアーキテクチャの概要を説明します。



サーバーとしての流星、クライアントとしての流星



Meteorは、ブラウザ、プロキシ、ルーター、その他のネットワークコンポーネントの観点から見ると、実際には通常のWebアプリケーションです。 実際、Meteorアプリケーションは2つの主要な部分で構成されていますブラウザー内で機能する部分とサーバーとして機能する部分です。 これらの2つの部分は、多くの最新のWebアプリケーション( GmailTrelloなど )の典型的な方法で相互に対話するように構成されています



画像

この流星により、開発者はクライアントとサーバーの対話の複雑さを心配することなくアプリケーションを作成できます。



Meteorは3種類のリクエストを処理します



さらに深く掘り下げると、Meteorは3種類のリクエストを処理します。 ここにあります:





静的ファイル


静的ファイルは、 /パブリックフォルダーの画像およびその他の同様のリソースです。 流星は、起動時にこれらのファイルを自動的に処理します。



さらに、MeteorはすべてのJavaScript(JavaScriptにプリコンパイルされたテンプレートを含む)およびCSSファイルを縮小および接着し、静的にレンダリングします。



DDPメッセージ


DDPは、Meteorがクライアント部分とサーバー部分の間の通信に使用するプロトコルです。 すべてのクライアントデータサブスクリプション、リモートプロシージャコール、およびMongoDB操作—これらはすべてDDPプロトコルを使用して行われます。 さらに、これはかなり軽量なプロトコルです。 メッセージは便利なツールddp-analyzerを使用して表示できます。



HTTPリクエスト


公式のドキュメントにはまだこれに関する情報がないという事実にもかかわらず、Meteorは他の通常のアプリケーションと同様にHTTPリクエストを処理できます。 たとえば、ファイルのアップロードはHTTPリクエストのようにMeteorによって処理されます。 詳細については、StackOverflowの質問をお読みください。



Meteorには2つのサーバーがあります



Meteorは1つのポートでのみリッスンしますが、内部的には2つの別個のサーバーとして機能します。

画像

HTTPサーバー


HTTPサーバーは、静的ファイルを転送し、HTTP要求を処理するために使用されます。 これらの目的のために、Meteorはconnect Node.jsモジュールを使用します。



DDPサーバー


DDPサーバーは、すべてのデータ公開、MongoDB操作、Meteorメソッドを処理します。 流星はSockJSをトランスポートとして使用します。 基本的に、DDPはMeteorによって変更されたSockJSサーバーです。



MongoDBとMeteor



同じMongoDBデータベースに接続されたMeteorの複数のインスタンスを実行することにより、Meteor HTTPおよびDDPサーバーをスケーリングできますが、結果は完全ではありません。 これは、Meteorが変更のためにMongoDBをポーリングする方法が原因です。Meteorの1つのインスタンスがMongoDBのデータを更新する場合、他のインスタンスがこの更新を確認して接続ユーザーに配布するまでに数秒かかる場合があります。



これを説明するために、Meteorの2つのインスタンス(AとB、それぞれに対応するHTTPサーバーとDDPサーバーがある)が同じチャットを提供していると想像してください。 それらの前にプロキシサーバーがあり、これらのインスタンスのいずれかにユーザーをランダムに接続します。 インスタンスAに接続している誰かがチャットメッセージを書き込んだ場合、インスタンスBに接続しているユーザーはリアルタイムでそれを見ることができず、サーバーBが変更を認識してブラウザーに配信するまで数秒待つ必要があります。



次の記事では、この効果を取り除くためにMeteorとMongoDBを構成する方法を示します。

このようなポーリングロジックは、運用サーバーで使用するには非常に高価であり、最適なソリューションはMongoDB Oplogを使用することです。 Meteor 1.0ではそうなりますが、今のところはスマートコレクションを使用できます。




翻訳者から:誰かが興味を持っているなら、私の意見では、現時点で最高のMeteorリソースは次のとおりです。

  1. イベントマインド -トレーニングのスクリーンキャスト。
  2. MeteorHacks -Meteorに関する記事とニュース。




追伸 ハブに新しいハブMeteor.JSが登場しました-サインアップ。



All Articles