好的,我正在回答我自己的问题。我使用的设置是 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);
}
}