1

我正在使用服务器端的 Node.JS 开发一个 Flex 应用程序,并利用套接字来为我的客户提供服务。问题是:当我从 Flashbuilder 启动它时,我的应用程序运行良好,它可以连接到服务器并将数据提供给我的客户端。但是当我尝试使用 url 访问这个应用程序时,它不起作用。

一个快速的工作链接:D:\Dev\workspace\MyProj\bin-debug\index.html

不工作的链接:(swf 加载,但没有数据)http://ip-address:3000/flexapp/index.html

看起来像一些安全问题。但我不确定,因为我的头脑拒绝产生解决方案。任何帮助深表感谢。

进一步探索: 我尝试了网上给出的许多建议,如下所示:首先,据我了解,Socket.io 本身在端口 10843 上为您提供了 flashpolicyfileserver,但我仍然遇到上述问题。其次,我尝试按照此处的说明使用 authbind 运行 flashpolicyserver,但仍然无法解决我的问题。

4

1 回答 1

0

好的,我正在回答我自己的问题。我使用的设置是 Flex4.6、带有 Socket.IO 的 Node.JS、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 回答