もちろん私はAjaxを知っていますが、Ajaxの問題は、ブラウザーがサーバーを頻繁にポーリングして、新しいデータがあるかどうかを確認する必要があることです。これにより、サーバーの負荷が増加します。
サーバーを頻繁にポーリングする以外に、Ajaxを使用するよりも良い方法はありますか?
もちろん私はAjaxを知っていますが、Ajaxの問題は、ブラウザーがサーバーを頻繁にポーリングして、新しいデータがあるかどうかを確認する必要があることです。これにより、サーバーの負荷が増加します。
サーバーを頻繁にポーリングする以外に、Ajaxを使用するよりも良い方法はありますか?
回答:
はい、探しているのはCOMET http://en.wikipedia.org/wiki/Comet_(programming)です。検索に適した他のGoogle用語は、AJAXプッシュと逆アヤックスです。
はい、Reverse AjaxまたはCometと呼ばれています。コメットは基本的に、データをリアルタイムでWebブラウザーにプッシュするために、存続期間の長いHTTPリクエストを開くさまざまな方法の包括的な用語です。私はStreamHub Push Serverをお勧めします。いくつかの素晴らしいデモがあり、他のどのサーバーよりも使い始めるのがはるかに簡単です。簡単な紹介については、Getting Started with CometとStreamHubチュートリアルをご覧ください。無料でダウンロードできるCommunity Editionを使用できますが、同時ユーザー数は20に制限されています。商用バージョンは、サポートだけでも十分価値があり、SSLとデスクトップ.NETとJavaクライアントアダプターを利用できます。Googleグループからヘルプを利用できます、ネット上にはたくさんのチュートリアルがあり、GWTコメットアダプターもあります。
今日では、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」である彗星(Ajaxが洗浄剤であるという事実の偽装)を調べます。これには、通知を受け取るために各ユーザーが長期間のサーバー接続を必要とすることに注意してください。アプリを作成するときは、パフォーマンスへの影響に注意してください。
彗星は間違いなくあなたが望むものです。言語/フレームワークの要件に応じて、さまざまなサーバーライブラリを利用できます。たとえば、WebSyncは、ASP.NET / C#/ IIS開発者向けのIIS統合コメットサーバーであり、他の言語との緊密な統合が必要な場合は、他のスタンドアロンサーバーも多数あります。
Cometに時間をかけることを強くお勧めしますが、実際に使用できる実装やライブラリを知りません。
ライブCallcenterのエージェントとコールキューステータスの更新を伴うWebアプリの一種の「コールセンターコントロールパネル」では、機能する社内ソリューションを開発しましたが、使用できるライブラリからは遠く離れています。
私たちが行ったのは、電話システムと通信し、新しいイベントを待機し、状況の写真を維持する小さなサービスをサーバーに実装することでした。このサービスは小さなWebサーバーを提供します。
私たちのWebクライアントはHTTPを介してこのWebサーバーに接続し、最後の写真(XMLでコード化)を要求し、それを表示してから、新しい写真を要求して再び行きます。この時点でのWebサーバーは次のことができます。
このように、クライアントがポーリングすると、最大で0〜30秒で応答が返されます。新しいイベントがすでに生成されている場合はすぐにそれを取得します)、それ以外の場合は新しいイベントが生成されるまでブロックします。
それは基本的にポーリングですが、ウェブサーバーをオーバーヒートしないようにいくらかスマートなポーリングです。コメットがあなたの答えではない場合、これは同じアイデアを使用して実装できますが、AJAXまたはJSONでのコーディングをより広範囲に使用してより良い結果を得ることができます。これはAJAX以前の時代に設計されたため、改善の余地はたくさんあります。
誰かがこれの実際の軽量実装を提供できれば、すばらしいです!
さらにもう1つの標準的な方法はSSE( JavaScriptオブジェクトの後のサーバー送信イベント、EventSourceとも呼ばれます)です。
コメットは、実際にはDojo Toolkit(http://www.dojotoolkit.org)のAlex Russellによって造られました。詳細はhttp://cometdproject.dojotoolkit.org/へのリンクです。
COMET用に設計されたWebサーバーであるMeteor Serverをチェックする価値があるかもしれません。素晴らしいデモで、twitterfallでも使用されています。
あなたは私たちの彗星コンポーネントを試すことができます -それは非常に実験的です...!
このライブラリhttps://github.com/SignalR/SignalRをチェックして、データが利用可能になったときにクライアントに動的にデータをプッシュする方法を確認してください
jspページを使用している場合は、Javaプッシュレットを調べることもできます。
ReverseHTTPも確認したい場合があります。