1

サーバー側でNode.JSを使用し、ソケットを利用してクライアントにフィードするFlexアプリに取り組んでいます。問題は、アプリケーションを Flashbuilder から起動すると正常に動作し、サーバーに接続してクライアントにデータをフィードできることです。しかし、URL を使用してこのアプリにアクセスしようとすると、機能しません。

急ごしらえの作業リンク: D:\Dev\workspace\MyProj\bin-debug\index.html

機能しないリンク: (swf はロードされますが、データはありません) http://ip-address:3000/flexapp/index.html

セキュリティ上の問題があるようです。しかし、私の心は解決策を生み出すことを拒否しているため、確信が持てません。どんな助けでも大歓迎です。

さらなる調査: 次のように Web で提供された多くの提案を試しました: まず、私の理解では、Socket.io 自体がポート 10843 で flashpolicyfileserver を提供しますが、それでも上記のような問題があります。次に、authbind を使用してここで説明されているように、flashpolicyserver を実行しようとしましたが、それでも問題を解決できませんでした。

4

1 に答える 1

0

わかりました私は自分の質問に答えています。私が使用しているセットアップは、Flex4.6、Node.JS と Socket.IO、FlashSocket APIです。

この問題に直面したとき、アプリに crossdomain.xml を指定することから始めました。しかし、それはうまくいきませんでした。次に、ポート 843 で別のポリシー サーバーを使用してみましたが、うまくいきませんでした。しかし、これを通して、ソケットが初期化され、後で切断されていることがわかりました。そのため、Flashsocket でこの問題が発生しました。そのソースコードを取得してデバッグしました。ポリシー URL は、提供された ip+host に基づいて生成されていることがわかりました。これは良い方法ですが、このポリシー URL をカスタマイズする方法がまったく提供されていません。私がしたことは、独自のpolicyURLを渡すことができるように変更されただけで、それが渡されるたびにFlashsocketはそれを使用する必要があり、それ以外の場合は古い方法でpolicyURLを実行し続けます. そしてそれはうまくいきました。

FlashSocket への私の小さな変更:

....
private var policyURL:String;
public function FlashSocket( domain:String, protocol:String=null, proxyHost:String = null, proxyPort:int = 0, headers:String = null, policyURL:String = null)
{
....
this.policyURL = policyURL;
....
}

protected function loadDefaultPolicyFile(wsUrl:String):void {
            var policyUrl:String = "xmlsocket://" + URLUtil.getServerName(wsUrl) + ":843";
            log("policy file: " + policyUrl);
            if(policyURL){
                Security.loadPolicyFile(policyURL);
            }else}
                Security.loadPolicyFile(policyUrl);
            }
        }
于 2012-06-18T10:36:34.767 に答える