2008-08-12 12 views
5

接続タイムアウト後に(SocketクラスとXMLSocketクラスを使用して)TCPリスナーに接続する際に問題があります。ActionScript 3.0ソケットが再接続できない

サーバーへのTCP接続を維持する必要があるフラッシュアプ​​レットがあります。タイマー、ピンポンシステムなどを使ってタイムアウトを実装しました。しかし、問題があります。 Socket.connect()を呼び出すと、Flash Player(9.0.115とその前の多くの厩舎)がSYNパケットを経由して3つの接続要求を送信します。それらのどれにも返答されない場合(例えばサーバーがダウンしているため)、アプレットをサーバーに接続しようとすることができません。これまでつまり、アプレットの存続期間内です。

明確及び/又は要約する:

Socket.connect()またはのXMLSocket.connect(に与えられた任意のホスト/ポート対)の場合、コールが失敗した場合、(任意の後続の接続)は、任意の他のソケットへのコール(またはXMLSocket)インスタンスは、同じホスト/ポートのペアに対するフラッシュアプ​​レットの有効期間内に無視されます。 (少なくとも私はパケットスニファを使用して伝えることができる限り)

私は数多くのソケットメソッドを呼び出し、破棄してオブジェクトを再作成し、ソケットのプールを使用していました。 ;すべて無駄に。

私の現在の解決方法は、JavaScript呼び出しによって親のWebページに通知し、アプレットをリロードすることです。それはかなりの解決策ではなく、問題の回避策を実装しようとしていません。が原因です。なぜなら、Flashはソケット接続を正しく処理できないからです。

私は非常に単純なものを見逃しているに違いありません。

アイデア?

1:あなたは本当にオブジェクトを破壊することはできません。私はそれらにすべての参照を削除し、最高のために願っています。この場合、GCを明示的に起動しようとはしませんでした。 (けれども私は、アレイ内のソケットを入れてを削除を使用してみたと思う。)


はい、それは、接続が成功した場合に期待どおりに動作(接続は後に低下しても。)

これを引き起こす唯一のイベントは、サーバーがまったく応答しない場合です。 Flashはホスト/ポートの組み合わせを「オフライン」としてマークし、アプレットの存続期間中にそれ以上パケットを送信しないようにします。

接続が拒否されている可能性があります(ホストはオンラインですが、ポートをリッスンしていないなど)。これは発生しません。

私はエラーメッセージやSocketからの他の種類のフィードバックを受け取りません。

最初に障害が発生したときに、同じホスト/ポートのペアに対してconnect()を複数回呼び出すことはありますか? 最初のconnect()が失敗したことをどのように知りましたか?その後のconnect()コールの前に、ソケットをリセットするために何かしましたか?

+0

サーバが利用可能な場合、接続は正しく成功しますか? 3回後に失敗すると、エラーメッセージが表示されますか?私はソケットで多くの仕事をしてきましたが、この問題に遭遇したことはありません。 –

答えて

3

これは未解決のバグFP-269に関連する可能性があり、FP-67と同じ根本原因を持つ可能性があります。

私がお勧めしたい[09/23/08 4時49分PM] -

このビルドは labs.adobe.com

エドウィン・ウォンで見つけ 現在パブリックベータリリースで修正されなければなりませんあなたはlatest public betaショットを与えます...

+0

ありがとう、私はAdobeのバグデータベースを見つけたことはありませんでした。過去にたくさんの投稿をしていたかもしれません... – aib