2012-04-11 13 views
12

流星群Framework screencastを見たことがあります。データベースを変更するとブラウザのデータがシームレスに変更されることに気付きました。通常、AJAXは数秒ごとにページの一部をリロードしますが、ここではブラウザのリロードに気付かなかったのです。彼らはどのようにメテオでそれを達成しましたか? Node.jsに依存していますか?流星はどのようにブラウザを更新しますか?

更新:Toby Catlinは別の興味深い質問を投げかけます。 Meteorはさまざまなブラウザをどのように扱いますか?

+0

も参照[ホットコードをプッシュする](http://meteor.com/blog/2012/02/09/hot-code-pushes) –

答えて

5

サーバーがブラウザにデータを要求する必要なくブラウザにデータをプッシュできるいくつかの手法があります。そのような技術の用語はComet [wikipedia.org]で、ほとんどの技術はAJAX(彗星と呼ばれる漂白剤とAjaxという清掃製品があります)に関連しています。長いポーリング、ストリーミングXHR、永遠のフレーム、サーバー送信イベント、Webソケットなど、さまざまな接続タイプがあります。 Socket.IOはストリーミングサーバに接続タイプを提供する優れたライブラリです。

Comet接続をサポートするサーバーが必要です。あなたは現在のもののために私の頭の上ではあるが、私の頭の上からgoogleすることができる:node.js、tornado、cometd、orbited、Jetty streaming

私はMetorがブラウザの能力Chromeの場合はロングポーリング、IEの場合はロングポーリング。誰かがもっと具体的な答えを与えることができるなら、私は興味があるでしょう

+0

あなたが必要といけないWebSocketをを使用してブラウザとサーバーの間に一定の接続が確立されているため、ブラウザがデータを要求しています。サーバーは、接続されている限りクライアントにデータを送信できます。 – moka

+0

ソケットIOを使用している場合、古いブラウザーの長いポーリングに戻ってしまうと思います。新しいものはwebSocketを開きます – climboid

+0

Cometは現在、W3CによってServer Sent Events(SSE)として知られています。参照:http://stackoverflow.com/questions/1964494/how-to-make-all-connected-browsers-reload-initiated-by-a-server-side-event –

17

(Meteor APIの)SessionMeteor.autosubscribeの両方を使用して、変更がクライアントに確実に反映されるようにします。

これらのMeteor APIは、SockJSのXHR(XMLHttpRequest)を使用しています。 SockJSはWebSocketエミュレーションユーティリティです。サーバー上で何かが変化した場合、SockJSはXHRが送信され、変更されたデータがJSON応答にあることを確認します。

はい、MeteorはNode.jsに完全に依存しています。流星のドキュメントから:

A流星のNode.jsアプリケーション・コンテナ内の流星サーバー上で実行され、すべてのサポートHTMLフラグメント、CSSルールクライアントのWebブラウザ内で実行されたJavaScriptのミックス、JavaScriptがあります、および静的資産。 Meteorはこれらの異なるコンポーネントのパッケージングと送信を自動化します。また、ファイルツリー内でこれらのコンポーネントをどのように構造化するかについては非常に柔軟です。

唯一のサーバー資産はJavaScriptです。 Meteorは、クライアントとパブリックサブディレクトリの下にあるものを除いたすべてのJavaScriptファイルを収集し、ファイバー内のNode.jsサーバーインスタンスにロードします。 Meteorでは、サーバーコードはリクエストごとに1つのスレッドで実行され、Nodeに典型的な非同期コールバックスタイルでは実行されません。線形実行モデルは、Meteorアプリケーションの典型的なサーバーコードに適しています。

出典:http://docs.meteor.com/https://github.com/meteor/meteor

関連する問題