3

AIRで作成するソフトウェアはサーバーとクライアントの2つです。AS3とAIRの両方。

リモート共有オブジェクトを使用した大きなアーキテクチャを使用したり、BlazeDSを使用したり、Java / Python/...サーバーを途中で設定したりする必要はありません。

サーバー側とクライアント側でソケットデータを解析する必要をなくすために、クライアント側でXMLSocketを使用することを考えました。データはFlashフレームワークによってすでに解析されている方法で到着します。

ただし、このXMLSocketをAIR ServerSocketで使用すると、「connect」イベントによってサーバー側でrawSocketが返されます。そのため、サーバー側でXMLデータを手動で管理する必要があります。

サーバー側でXMLSocketを使用してクライアントと通信する方法はありますか?返されたソケットをXMLSocketに変換するための一種のトリック?

それを管理するAS3ライブラリがある場合、私はそれを見つけられませんでした。

ありがとうございました!

4

2 に答える 2

1

私は、ActionScriptのサーバー側コードが悪くなるという点でエイドリアンに完全に同意します。構文的にはそれほど遠くないJavaの方がはるかに優れています。ホットスポットJIT、マルチスレッド、高度に最適化されたサーバー側コンポーネントがたくさんあります。

XML Socketは、解析されたXMLを表示しますが、それでも、ネットワークを介して送信されるのは、テキストとしてのXMLだけです。したがって、パフォーマンスに関しては、通常のソケットを使用して自分で解析するのとまったく同じです。そして、これは次のように簡単です。

var text: Object = <data received>
var xml: XML = new XML(text);

したがって、完全なxmlペイロードを受け取ったら、準備が整います。

そして、XMLSocketが解析前に完全なXMLの取得を処理できると思う場合、私はいくつかのXML Socket処理を実行し、XMLを2つ以上のフラグメントで配信し、自分で対処する必要がありました。彼女の例:

...
private var xmlData: String = "";
private var errorCount: int;
...

private function dataHandler(e: DataEvent): void {  
  if (errorCount > 2) {
    errorCount = 0;
    xmlData = "";
  }     
  try {             
    xmlData += e.data;
    processMessage(XML(xmlData));
    // valid XML, clear the buffer
    xmlData = "";
  } catch (error: Error) {
    // otherwise log error and wait for the rest of the XML 
    log.error(error.toString());
    log.error(e.data);
    errorCount++
  }
}
于 2011-07-12T06:43:28.997 に答える
0

サーバー側についてははっきりとは言えませんが、AS3はサーバーにとって貧弱な言語だと思います(単にマルチスレッドサポートがないためです)。とにかく、それを新しいオブジェクトにキャストしてみてください。

var myXMLSocket:XMLSocket = myOldRegularSocket;

少なくとも、エラーがスローされた場合、エラーによって洞察が得られる可能性があります。XMLソケットはソケットをマスクしようとするので、私はアドバイスしますが、実際にはそれを複雑にするだけです。XMLデータのみを送信する必要がある場合は、ほぼ同一の「ソケット」構造で送信できます。

AIRには「ServerSocket」オブジェクトタイプが含まれているようです。これはおそらくあなたの最善の策です。

'raw'ソケットがどのように機能するかを学ぶために少し時間を取ってください。そうすれば、あらゆる場所でデータを変換する手間が省けます。正規表現は、特にデータが常に動的である場合、xmlよりもデータの解析がはるかに高速です。

于 2011-07-12T04:06:44.530 に答える