2009-08-31 6 views
1

私はサーバーを1秒間に数回呼び出すAJAXオンラインゲームを手に入れました。 AJAXコールは良好ですが、通常のTCP/IPソケット接続よりも遅いです。FlashでAJAXを改善することはできますか?

私の質問は、フラッシュを使用できる場合、サーバー接続用のフラッシュアプ​​リケーションを使用してゲームを改善できますか?それとも、Firefoxのアドオンの一部の解決策がありますか(私のユーザーの70%がFirefoxを使用しています)?

+0

は、私は疑問について質問があります。本当にAJAXコミュニケーションは、フラッシュによって提供されるコミュニケーションの速度が遅いのですか? – Isaac

+0

AJAXはステートレスプロトコルであるため、依然として追加の不要なデータを送信します。 – Thinker

+1

どのようにajax呼び出しがtcp/ip接続よりも遅いと判断しましたか?同じ基本データが送られましたか? –

答えて

2

ジャスト(ajaxianが本日発表された)あなたのために役に立つかもしれません。この新しいJSライブラリに遭遇するが起こっ:

Kamaloka-JS:自分のサイトから

Kamaloka

ネイティブJavaScriptでのAMQPメッセージングプロトコルの実装です。 Orbitedで使用するようにセットアップされていますが、Orbitedと同様にブラウザでTCPSocketを生成するライブラリで使用できます。


(フラッシュを使用して)別の同様のソリューション:amqp-js

+0

奨励賞をいただきありがとうございます! –

+0

これはまさに私が探していたものでした:) – Thinker

3
  1. JSを呼び出すためのフラッシュからあなたのHTMLに内蔵フラッシュXMLSocketオブジェクト
  2. 隠す(幅/高さ= 1)
  3. 使用flash.external.ExternalInterface.call
  4. の機能を経由してあなたのゲームの通話を処理Flashファイルを作成します。

ExternalInterface経由のFlash/JS通信は非常に高速で、これはソケット応答によって提供される速度を処理できます。

こちらがお役に立てば幸いです。

+0

+1 - 既に存在しているものを再利用するためにフラッシュを呼び出す方法を提案するため。 –

+0

問題は、私はまったくフラッシュを知らないし、私はすでに解決策を探している。 – Thinker

+0

@Thinker - あなたは思想家ですから、そうすることができます;)しかし、真剣に、このウェブサイトは初心者の質問に専用ではないので、初心者の回答とすべての詳細はありません。マクラムの答えは啓発されているようですので、先に進んでください! – Isaac

2

この最適化を行う前に、遅い部分がjavascriptとサーバーの間のソケット接続であることを確認するために、最初にプロファイルすることが必要な場合があります。

私はサーバー側をプロファイルする傾向があり、その後私はjavascriptからサーバーに戻ってプロファイルを作成します。その違いはソケット接続によるものです。

数字があれば、十分な改善があるかどうかを確認するために、Makramが提案したような他の変更をプロファイルすることができます。

サーバーへの呼び出しは、あなたがそれを支援する彗星を使って見ることができポーリングのいくつかの並べ替えている場合:ジェームズ・ブラックが直進ジャンプしにすべてを置き換えるリッピングしていない、と述べたことと同様に http://en.wikipedia.org/wiki/Comet_%28programming%29

0

ボトルネックがどこにあるかを把握する前に、Flashを実行してください。ポイントはある -

私は、あなたのコミュニケーションのすべてのレイヤをレイアウトするだけで明確なものを作りたい、私はあなたにも、コメントの一部から判断すると、画像の一部が欠けかもしれないと思う

...そのすべてではありませんが、あなたは問題のあるレイヤーだけを見るほうがよいでしょう。

  1. クライアントコード - 現在のJavaScriptは、次のレイヤーを非同期に呼び出します。 Flashに最適化すると、この部分はより反応的で、「より豊か」になります。
  2. TCP/IP(それ以下になることはありません) - TCP はステートフルなのでです。これは常にステートフルです。少なくとも接続層では...これは、通常、TCP接続が長時間開いたままになっていて、各要求に対して新しいTCPコネクションを開かないということです。
  3. HTTP - プリンシパルではステートレスではありますが、通常は何らかの形のクッキーとサーバー側セッションを回避します。また、それはテキストベースでオーバーヘッドの束であるため、特にバイナリデータの場合、効率的なプロトコルではありません。このプロトコルをスキップすることは技術的に可能ですが、ブラウザのアプリケーションでこれを行うことを強くお勧めします。(a)ユーザーの観点から予期せぬこと。
  4. XML - ボトルネックが送信されるデータの量にあることがわかった場合、XMLはかなり冗長であるため、ペイロード形式を切り替えることができます。たとえば、ここではJSONを使用するとよいでしょう。または、おそらくちょうどXMLスキーマをトリム...
  5. サーバー側のアプリケーション - しばしば、ボトルネックは、下流に起こるものに関係なく、ここになります。

クライアントにFlashを切り替えると2つのメリットがあります:クライアント自体がクライアントによって高速化され、上記の3つの(http)をバイパスして直接ソケットを呼び出すことができます。再び、第2の利益は疑いの余地があり、利益は疑問であり、明確な欠点があることに注意してください。
ボトルネックがクライアントの表示コードでない限り、JSON(またはその他のデータ形式)に切り替える方が良いし、サーバーコードを最適化する方がよい。問題がどこにあるかを把握して把握したら、どこに努力を集中させるかをよく知るでしょう。私は、Flashがそれを助けてくれるとは思えません。 (ゲームであるため、改良された表示が必要な場合があります)。

+0

あなたが書いたのはすべてスマートです。私のゲームは、少量のデータを頻繁に送信します。 50〜250バイト。 HTMLのオーバーヘッドは約200%以上です。サーバーは1-2msで応答を作成し、サーバーにpingは60msで、AJAX応答は約120msです。だから私はステートフルな接続が助けになると思うが、誰かがすでにそういうことをやったことがあった。 – Thinker

+0

また、通信が行われる限り、既にTCP接続を開いたままにしています。オーバーヘッドに起因する遅さのように聞こえます(それよりもずっと少ない必要があるときには、おそらく各要求に対して複数のKを送信しています)。おそらくXML解析ルーチンもあります。私の具体的な推奨事項は、XMLを取り除いたり、JSONなどを試してみることです。トレードオフの価値はないHTTPをリッピングするのは面倒なことではありません(しかし、それは間違いなく最適化できます)。 Btw、どのくらいのデータが返されるかは言及していませんでしたか? – AviD

+0

私はJSONを使用して、戻り値は約20バイトです。そして、ping server.com -l 50とping server.com -l 500または1000との間に違いがあることがわかります。したがって、50または100のデータを送信し、ping server.com -l 1000のような応答時間を得ます。 – Thinker

0

プロキシーがサポートされていないことをユーザーに知らせるメッセージであっても、プロキシー がユーザーに設定されている場合は、賢明なことをしてください。

プロキシはとても簡単です。

関連する問題