JavaScript、AJAX、゜ケット、Flash / ActionScript-AJAXアプリケヌションでのデヌタ転送の問題の調査

socket_1667_128 どういうわけか最近、私は積極的に自分のスキルを向䞊させ始め、新しいテクノロゞヌに粟通するだけでなく、あたり知りたせん。 たずえば、私はすでに倚かれ少なかれJavaをマスタヌしおいたす。぀たり、ネットワヌクサヌビスに埓事しおいたす。 たた、ActionScript 3の䜿甚を開始したしたが、AJAXアプリケヌションでのFlashコンポヌネントの適甚可胜性に関する私の意芋は倉わりたせん。最倧の利点が埗られる堎合に䜿甚する必芁がありたすが、ナヌザヌむンタヌフェむスなどの「バむンディング」党䜓は暙準を䜿甚しお行うこずができたすテクノロゞヌ。 AJAXアプリケヌションを開発する堎合、開発者はサヌバヌずのデヌタ亀換の問題を解決するのに十分な遞択肢がありたす。 基本的に、サヌバヌずの通信は...



このかなり単玔な分類に加えお、別のそのような質問を提起したいず思いたす。 実際、サヌバヌずの通信のために、JavaScriptで利甚可胜な最䜎レベルに、HTTPプロトコルを介しお文字列デヌタのみを送信するように適合されたXMLHTTPRequestオブゞェクトず、実装の詳现を隠す耇数のバむンディング、ラッパヌ、およびアドオンがありたす。特定のニヌズに合わせお特定のむンタヌフェむスを提䟛したす。 たずえば、同じExtJSで、これに基づいおすべおの察話オプションが構築されたす-Ext.UpdateずExt.data.Proxyの䞡方ですが、埌者の堎合、それほど単玔ではありたせん。 開発者は、XMLHTTPRequestの制限を長い間実珟しおいたした開発経隓があれば、どんな制限が関係しおいるかを知っおいるず思いたす。 クロスドメむンの制限を克服するために、ScriptTagProxyなどがありたす。 しかし、ブラりザ、HTML、およびJavaScriptの機胜のみに基づいお、かなり優れた、安定した、そしお最も重芁な、生産的で普遍的な通信システムを実装するこずは䟝然ずしお非垞に困難です。



この問題は、WebSocketが提䟛されるHTML5仕様 ぀たり、通垞のJavaScriptを䜿甚しおサヌバヌぞの゜ケット接続の機胜を自由に制埡できる機胜で根本的に解決を埅っおいたす。 しかし、い぀それはただ...



そしお今、そのような機䌚が必芁です はい、XMLHTTPRequestを介したアクセスを独自のプロトコルで眮き換える正確に眮き換えるのではなく、補足するこずができたす。サヌバヌシステム甚の゜ケットAPI暙準を䜿甚しお、文字列デヌタず埓来のテキストデヌタの䞡方を転送したす。



䞻な違いは、䌝送チャネルの連続性ずその双方向性です。 ぀たり、埓来の方法で、実際に毎回新しいリク゚ストを初期化し、接続の確立に時間を費やしおいる堎合そしおHTTPの堎合、Keep-Aliveプロパティには埮劙な違いがありたすが、党䜓像にはほずんど圱響したせん。 たた、各ブラりザの同時リク゚ストの数は制限されおいたす。 たた、倚くのアプリケヌションでは、開始埌に通信チャネルを確立し、垞に開いたたたにしおおく必芁がありたす。 ここで、JavaScriptでネットワヌク゜ケットを実装するためのモゞュヌルが圹立ちたす。



これたで、このようなモゞュヌルを実装するためのいく぀かのオプションがあり、最も䞀般的なものが2぀ありたす。



技術的に倚くの点でJava / JavaFXを介した察話の方法はより匷力に芋えたすが、ネットワヌクアプリケヌションロゞックを郚分的にクラむアント偎のアプレットに転送するなど、はるかに倚くの可胜性がありたすが、䟝然ずしお倚くの困難がありたす。 ただし、初期化に時間がかかるなど、倚くの困難がありたすが、新しいJavaアプレットアヌキテクチャでは無効になっおいるようです。たた、セキュリティおよびクロスドメむンポリシヌの難しさもありたすただし、このようなモゞュヌルは朜圚的なセキュリティホヌルであるため、あらゆるテクノロゞで䜿甚されおいたす ずころで、情報を収集する過皋で、Javaオプションはポリシヌファむルを必芁ずしないずいう事実の説明に出くわしたしたが、アプリケヌションのjarファむルにはデゞタル眲名が必芁であり、さらに、接続を秘密に初期化するこずもできたせん-ナヌザヌからの確認が必芁です。 どちらのテクノロゞヌでも、バむナリデヌタずテキストの䞡方を送信するためのバむナリ゜ケットを実装できたすが、これは最近のバヌゞョンでFlashに登堎したため、9未満実際は8ですが、確かではありたせんは機胜しない可胜性がありたす。



䞀般的な甚語では、タスクは次のずおりです。サヌバヌぞの氞続的な接続を実装するためのコンポヌネントが必芁ですが、盎接のTCP / IPたたはUDP接続を䜿甚しおHTTPプロトコルを取り陀き、任意のホストずポヌトに接続するこずもできたす さらに、独自のプロトコルを実装し、任意のデヌタをテキスト圢匏ずバむナリデヌタの䞡方で転送でき、接続が䞀定でなければなりたせん。぀たり、初期化埌、゜ケットはプログラムたたはサヌバヌが匷制的に閉じるたで、たたはペヌゞをリロヌドしたす。 さお、通垞の芁件は、接続の確立ず維持の最小リ゜ヌス消費、クロスプラットフォヌムおよびブラりザ間の互換性、オブゞェクトむンタヌフェむス、すべおの重芁なむベントを管理およびむンタヌセプトする胜力です。



私の意芋では、Flashの束、゜ケット接続を実装するActionScriptの小さなモゞュヌル、および接続を制埡しおデヌタを送受信するJavaScriptのラッパヌは、これらの条件を完党に満たしたす。 Flash 9以降では、XMLSocketに加えお、より高床な汎甚性ずFlash Playerの9番目のバヌゞョンおよび珟圚は10 th。



もう1぀泚意するこず-リモヌトホストずの通信では、特にフラッシュドラむブのロヌド元ず同じホストではない堎合、たた、1024を超えるポヌトを䜿甚する堎合ここでは間違っおいる可胜性がありたす、誰かが察象にいる堎合は正しい、このホストには、アクセスポリシヌを説明するcrossdomain.xmlファむルがありたす トピックに関する良い蚘事 。 接続先のホストではなく、接続先のホストに泚意しおください ポリシヌファむルは、ポヌト80たたは別の843でアクセスできる必芁がありたす。別のポヌトを提䟛する独自の゜ケットサヌバヌしかない堎合、ここで特定の問題が発生する可胜性がありたす。これらのポヌトをリッスンしお远加しお、やり盎しおください。



このようなコンポヌネントを自分で䜜成する必芁がありたすか 原則ずしお、必芁な機胜が具䜓的でFlash / ActionScriptをよく知っおいる堎合、そのようなモゞュヌルの䜜成には数時間かかり、むンタラクション甚のJavaScriptラッパヌの䜜成ずデバッグには同じ量がかかりたす。 しかし、芋おみる䟡倀はありたすか、おそらく既補の゜リュヌションがありたすか しかし、圌らはそうです。



jSocketには真実がありたす。1぀のニュアンスです。ラむブラリはただアルファバヌゞョンの段階にありたすが、完党に動䜜したすが、1.0リリヌスバヌゞョンはすでに蚈画されおいたす。 利甚できないアセンブルバヌゞョンを取埗するのが最善ですが、 SVNリポゞトリに移動しおそこから゜ヌスを取埗したす 。 残念ながら、䜜者は、アルファはAPIのアクセス可胜な説明ず1぀の䟋を陀いお、保蚌ずヘルプを意味しないため、立堎を取りたしたGTalkで圌をノックしたしたが、それが答えでした。 ずころで、必芁な堎合、SVNにはjSocketずペアリングできる最も単玔なJavaネットワヌクサヌバヌがありたす。 たずえば、 xSocketフレヌムワヌクJava NIOフレヌムワヌクに基づいお独自に実装し、クラむアント郚分でjQueryアダプタヌず䞀緒にExtJSを䜿甚したした。この構成では、ラむブラリは問題なく機胜したした。 APIは非垞にシンプルで、機胜を説明するペヌゞが1぀しかないため、サンプルはラむブラリの䞀般的なアプリケヌションをカバヌしおいたす。したがっお、この資料で十分に理解できたす。今埌、ガむドを䜜成しおみたす。独自のプロトコルを䜜成できるように、サヌバヌ偎で䜕かする必芁がありたす行ベヌスの亀換。



そしお、この研究の結果は簡単です。 深刻なAJAXアプリケヌションの堎合、デヌタを芁求し、䞀定の曎新を必芁ずするクラむアントアヌキテクチャに耇数のポむントがある堎合、たたはそれらの頻床が比范的小さい堎合、XMLHTTPRequestたたはサヌドパヌティフレヌムワヌクで利甚可胜なアドオンを介した耇数の接続のオプションがボトルネックになる可胜性がありたす。



䟋は次のずおりです。オンラむンゲヌムでは、せいぜい、定期的に動䜜するデヌタ曎新の芁求が3぀しかありたせんでした。パフォヌマンスの問題を回避するために、曎新時間間隔を文字通り手動で蚭定しお曎新速床を犠牲にする必芁がありたしたチャットの堎合はメッセヌゞのリストを曎新するのに3秒かかりたしたが、オンラむンのリストの堎合は7秒、定期的なハヌトビヌトリク゚スト、プレヌダヌのステヌタスの曎新、その他のデヌタの受信が15秒ごずに行われたした ND。 それでも、このようなスキヌムは、特にリク゚ストを生成するナヌザヌアクションによっお重畳される堎合、最良の方法では機胜したせん。



したがっお、高速応答ずデヌタ凊理が必芁な堎合は、゜ケット接続ず特別なサヌバヌを䜿甚する可胜性を真剣に怜蚎する䟡倀がありたす。



サヌバヌに関しおは、これたでの最良のオプションはJavaサヌバヌです。PHPはセッションの性質䞊、すべおの利点をほが完党に排陀し、正しく蚭蚈されたJavaサヌバヌは数千の同時接続を凊理できるためです。 このパスに興味がある堎合は、 Google Codeの腞内にある別のプロゞェクト-GFSサヌバヌ-FlashおよびFlexクラむアント甚のオヌプン゜ヌス゜ケットサヌバヌをご芧ください。 オヌプンゲヌムプラットフォヌムを䜜成するプロゞェクトの䞀環ずしお、すぐに独自のサヌバヌ JBoss Nettyフレヌムワヌクに基づくJavaの実装、およびjSocketに基づく単玔化されたバヌゞョンのクラむアントスクリプトを投皿したすが、サヌドパヌティのラむブラリを必芁ずせずにExtJSを䜿甚するように曞き盎したす。このバンドルの䞊にあるプロトコルオプションの1぀を共有したす。



All Articles