もちろん私はAjaxを知っていますが、Ajaxの問題は、ブラウザーがサーバーを頻繁にポーリングして、新しいデータがあるかどうかを確認する必要があることです。これにより、サーバーの負荷が増加します。
サーバーを頻繁にポーリングする以外に、(Ajaxを使用しても)より良い方法はありますか?
はい、探しているのはCOMET http://en.wikipedia.org/wiki/Comet_(programming)です。検索するのに適した他のGoogle用語は、AJAX-pushとreverse-ajaxです。
はい、それはReverse AjaxまたはCometと呼ばれます。コメットは基本的に、データを Web ブラウザにリアルタイムでプッシュするために、存続期間の長い HTTP リクエストを開くさまざまな方法の包括的な用語です。StreamHub Push Serverをお勧めします。これらにはクールなデモがいくつかあり、他のどのサーバーよりも簡単に使い始めることができます。簡単な紹介については、 Comet と StreamHub チュートリアルの概要をご覧ください。無料でダウンロードできる Community Edition を使用できますが、同時接続ユーザーは 20 人に制限されています。商用バージョンは、サポートだけでも十分に価値があり、さらに SSL およびデスクトップ .NET & Java クライアント アダプターを入手できます。ヘルプはGoogle グループから利用できます、ネット上にはたくさんのチュートリアルがあり、GWT Comet アダプターもあります。
最近では、WebSocket を使用する必要があります。これは 2011 年の標準であり、HTTP で接続を開始し、それらを双方向のクライアント サーバー メッセージ ベースの通信にアップグレードできます。
JavaScript から簡単に接続を開始できます。
var ws = new WebSocket("ws://your.domain.com/somePathIfYouNeed?args=any");
ws.onmessage = function (evt)
{
var message = evt.data;
//decode message (with JSON or something) and do the needed
};
サーバー側の処理は、技術スタックによって異なります。
基本的に「逆Ajax」であるComet(Ajaxが洗浄剤であり、Cometもそうであるという事実のなりすまし)を調べてください。これには、各ユーザーが通知を受信するために長期間のサーバー接続が必要であることに注意してください。アプリを作成するときは、パフォーマンスへの影響に注意してください。
コメットは間違いなくあなたが望むものです。言語/フレームワークの要件に応じて、さまざまなサーバー ライブラリを利用できます。たとえば、WebSync は ASP.NET/C#/IIS 開発者向けの IIS 統合コメット サーバーであり、他の言語とのより緊密な統合が必要な場合は、他のスタンドアロン サーバーも多数あります。
Comet に時間を投資することを強くお勧めしますが、実際に使用できる実装やライブラリはわかりません。
ライブ コールセンターのエージェントとコール キューのステータスを更新する Web アプリの一種の「コールセンター コントロール パネル」のために、機能する社内ソリューションを開発しましたが、使用できるライブラリとはかけ離れています。
私たちが行ったことは、電話システムと通信し、新しいイベントを待ち、状況の写真を維持する小さなサービスをサーバーに実装することでした。このサービスは、小さな Web サーバーを提供します。
私たちの Web クライアントは、HTTP 経由でこの Web サーバーに接続し、最後の写真 (XML でコード化されたもの) を要求し、それを表示してから、新しい写真を要求します。この時点で Web サーバーは次のことができます。
このようにして、クライアントがポーリングすると、最大 0 ~ 30 秒で応答を取得します。新しいイベントがすでに生成されている場合はすぐに取得されます)、それ以外の場合は、新しいイベントが生成されるまでブロックされます。
基本的にはポーリングですが、ウェブサーバーを過熱させないようにするためのスマートなポーリングです。Comet があなたの答えでない場合、これは同じアイデアを使用して実装できると確信していますが、AJAX または JSON でのコーディングをより広範囲に使用して、より良い結果を得ることができます。これは AJAX 時代以前に設計されたものであるため、改善の余地がたくさんあります。
誰かがこれの実際の軽量実装を提供できれば、素晴らしいです!
もう 1 つの標準的な方法は、 SSE (Server-Sent Events、 JavaScript オブジェクトの後にEventSource とも呼ばれます) です。
Comet に代わる興味深い方法は、Flash でソケットを使用することです。
コメットは、実際には Dojo Toolkit ( http://www.dojotoolkit.org ) の Alex Russell によって造られました。詳細情報へのリンクは次のとおりですhttp://cometdproject.dojotoolkit.org/
他の方法があります。彼らがあなたの状況で「より良い」かどうかわからない。ページの読み込み時にサーバーに接続し、サーバーからデータが送信されるのを待つJavaアプレットを作成できます。起動時にはかなり遅くなりますが、ブラウザがポーリングせずにサーバーからデータを受信する頻度は低くなります。
持続的http接続を使用することで、目的を達成することができます。
ウィキペディアでCometの記事をチェックしてください。これは、開始するのに適した場所です。
あなたは多くの情報を提供していませんが、ある種のイベント駆動型サイト(a'la digg spy)またはそれに沿った何かを構築することを検討している場合は、に接続する隠しIFRAMEを実装することを検討しているでしょう。接続が閉じられないURL。更新を実行するために、サーバーからクライアントにスクリプトタグをプッシュします。
COMET用に設計されたWebサーバーであるMeteor Serverをチェックする価値があるかもしれません. 素晴らしいデモで、 twitterfallでも使用されています。
サーバー側で BlazeDS または LiveCycle を使用して、クライアントで Flash/Flex アプリケーションを使用できます。RTMP 接続を使用して、データをクライアントにプッシュできます。RTMP は非標準ポートを使用することに注意してください。ただし、ポートがブロックされている場合は、簡単にポーリングに戻ることができます。
サーバーへの接続が開かれると、それを開いたままにして、サーバーはずっと前に使用していたコンテンツをプッシュできますがmultipart/x-mixed-replace
、これはIEでは機能しませんでした。
コンテンツを変更せずにヘッダーを送信せずに接続を開いたままにすることで、プッシュのように機能するポーリングを使用して巧妙な処理を実行できると思いますが、これは行ったことがありません。
このライブラリhttps://github.com/SignalR/SignalRを確認して、データが利用可能になったときに動的にクライアントにプッシュする方法を確認してください
非常に実験的ですが、 Comet コンポーネントを試すことができます...!
jspページを使用している場合は、Javaプッシュレットを調べることもできます。
ReverseHTTPも見たいと思うかもしれません。