2012-02-01 6 views
2

私は、TCPソケットを介してFlex/Airフロントエンドに画像を送るC++アプリケーションを持っています。このデータ転送はすべて同じホストで行われるため、ソケットはローカルホストサーバーに接続します。C++からFlex/Airにデータをソケットより速く転送する方法はありますか?

問題は、Flex/Airがソケットから画像全体を読み取るのに本当に時間がかかることです。サーバーはイメージを非常に速く送信しますが、Flex/Airはこのイメージを小さな部分で読み取ります。イメージ全体には約300MBがあり、Flex/AIRは各反復ごとに約1KBしか読み込みません。したがって、flexはソケットデータコールバックを呼び出し続け、アプリケーションの速度低下を引き起こしています。

フレックスで使用する同期ソケット、またはすべてのデータを一度に読み取ることができるソケットがありますか?ソケットが最善の選択肢でない場合は、他に高速なオプションがありますか?

マイソケットクラスは、次のようになります。

public class ClientSocket extends Socket 
{ 

    public function ClientSocket(host:String, port:int) 
    { 
     super(); 
     addListeners(); 
     ... 
     this.endian = Endian.LITTLE_ENDIAN; 
    } 

    private function addListeners():void 
    { 
     ... 
     addEventListener(ProgressEvent.SOCKET_DATA, onSocketData); 
     ... 
    } 

    private function onSocketData(event:ProgressEvent):void 
    { 
     try 
     { 
      ... 
      var serverMessage:ByteArray = new ByteArray; 
      readBytes(serverMessage); 
      ... 
     } 
     catch(error:Error) 
     { 
      //Error handling 
     }   
    } 
} 
+0

As3には同期ソケットがありません。データを受け取るソースコードを表示できますか? –

+0

いくつかのコードを追加しました。 –

答えて

0

私はあなたが可能な場合はあなたのソリューションを変更する必要があると思います。イメージをホストし、イメージのファイル名(またはURL)をFlexフロントエンドに送信するには、httpサーバーが必要です。その後、URLLoaderでロードして「完了」イベントのみを待機させることができます。

私はこれがより速くなると確信しています; o)この解決策は適用可能ですか?

+0

私はこれを行うことはできません。サーバーは画像を送信する準備ができていないため、これらの画像に多くの変形が生じます。だから私はこれらの変換されたイメージにディスク使用量の問題につながる可能性があります。とにかく、私はこの解決策を試し、どれほど速くなっているかを見ていきます。 –

+0

私はそれを試してみました。それはソケットソリューションより速くはありませんでした。私はApacheのhtdocsフォルダに画像を保存し、http経由でそれらの画像にアクセスしました。 –

+0

この回答自体はそれほど役に立ちませんでしたが、画像をサーバー側でbmpに変換し、キャンバスを使用して描画するなど、いくつかの方法を使用しました。 –

1

私はNative Extensions for AIRを使用します。これにより、C++とAS3間で直接データを送信できるようになります。間違いなく速くなりますが、AIR 3.0をターゲットにする必要があり、コードを実行している各プラットフォームの拡張機能を作成する必要があります。

関連する問題