Actionscript 3 如何使用Flash、Socket.IO和NodeJS修复此(可能)跨域策略错误
我正在使用FlashBuilder,一个ActionScript项目,它使用Socket.IO模块连接到运行NodeJS的服务器 要将Socket.IO与AS3连接,我使用以下库 从Flash Builder在本地进行测试时,它可以完美地工作 但是,如果托管在我的域上,我想它会引发此SecurityErrorEvent,因为我没有正确使用任何crossdomain.xml文件?老实说,我从来没有接触过这个话题,所以我不确定这是否是个错误 在任何情况下,我都有以下crossdomain.xml文件:Actionscript 3 如何使用Flash、Socket.IO和NodeJS修复此(可能)跨域策略错误,actionscript-3,node.js,cross-domain,socket.io,Actionscript 3,Node.js,Cross Domain,Socket.io,我正在使用FlashBuilder,一个ActionScript项目,它使用Socket.IO模块连接到运行NodeJS的服务器 要将Socket.IO与AS3连接,我使用以下库 从Flash Builder在本地进行测试时,它可以完美地工作 但是,如果托管在我的域上,我想它会引发此SecurityErrorEvent,因为我没有正确使用任何crossdomain.xml文件?老实说,我从来没有接触过这个话题,所以我不确定这是否是个错误 在任何情况下,我都有以下crossdomain.xml文件
Error #2044: Unhandled SecurityErrorEvent:. text=Error #2048: Security sandbox violation: http://kipos.bluecodestudio.com/holdthebomb/HoldTheBombWeb.swf cannot load data from http://23.29.126.76:8000/socket.io/1/?t=1356891827452.
at io::Socket/doHandshake()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/Socket.as:139]
at io::Socket/connect()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/Socket.as:110]
at io::Socket()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/Socket.as:90]
at io::IO$/connect()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/IO.as:36]
at MainController/endOfbluecodeSplash()[/Users/airrider3/Dropbox/Projects/Kipos/Minigames/HoldTheBombWeb/src/MainController.as:41]
at bluecodeSplash/endOfSplash()[/Users/airrider3/Dropbox/Projects/Kipos/Minigames/HoldTheBombWeb/src/bluecodeSplash.as:55]
at Function/http://adobe.com/AS3/2006/builtin::apply()
at com.greensock.core::TweenCore/complete()[D:\_Flash\_AS3\src\com\greensock\core\TweenCore.as:178]
at com.greensock::TweenLite/renderTime()[D:\_Flash\_AS3\src\com\greensock\TweenLite.as:477]
at com.greensock.core::SimpleTimeline/renderTime()[D:\_Flash\_AS3\src\com\greensock\core\SimpleTimeline.as:93]
at com.greensock::TweenLite$/updateAll()[D:\_Flash\_AS3\src\com\greensock\TweenLite.as:642]
我把它放在服务器的不同位置。(是否应该在托管客户端上?)。是的,游戏托管在bluecodestudio.com上,而游戏服务器位于IP 23.29.126.76上,运行在端口8000上
如果是跨域策略错误,是否有人愿意解释应该采取什么措施来解决问题
谢谢你的关注
更新1:
我在843端口上设置了一个服务器监听跨域文件,但我可以看到Flash是如何不尝试加载它的。(我测试了命令python-c'print”%c“%0”| nc 23.29.126.76 843
,并检查了策略服务器的实际工作方式
为什么SWF不尝试加载跨域策略文件?跨域策略文件应该托管在服务器运行的计算机上,即23.29.126.76上。对于套接字连接,flash播放器会自动尝试从端口843加载主跨域策略文件(您可以从adobe.com获得简单的策略服务器脚本) UPD: 使用
Security.loadPolicyFile(“xmlsocket://23.29.126.76:843”;
直接加载策略文件,但正如我编写的flash player已经自动执行相同的操作(对于端口843),它发送字符串请求“\0”
调试策略
要调试策略服务器,请执行以下操作:
echo-ne'\0'\124; nc-v主机端口
。此命令应打印出您的crossdomain.xml文件PolicyFileLog=1
打开flash player策略日志(确保您拥有flash player的权限),运行swf文件并读取策略日志,它具有用户友好的格式,您将能够通过此日志在大多数情况下找出问题跨域策略文件应托管在服务器运行的计算机上,即23.29.126.76上。对于套接字连接,flash Player会自动尝试从端口843加载主跨域策略文件(您可以从adobe.com获得简单的策略服务器脚本) UPD: 使用
Security.loadPolicyFile(“xmlsocket://23.29.126.76:843”;
直接加载策略文件,但正如我编写的flash player已经自动执行相同的操作(对于端口843),它发送字符串请求“\0”
调试策略
要调试策略服务器,请执行以下操作:
echo-ne'\0'\124; nc-v主机端口
。此命令应打印出您的crossdomain.xml文件PolicyFileLog=1
打开flash player策略日志(确保您拥有flash player的权限),运行swf文件并读取策略日志,它具有用户友好的格式,您将能够通过此日志在大多数情况下找出问题哇,我刚从Socket.IO文档中读到: “闪存策略端口默认为10843 默认情况下,Socket.IO客户端将检查服务器上的端口10843,以查看是否允许flashsocket连接。Adobe Flash Player通常使用843作为默认端口,但我们决定默认为非根端口。“ 这就是为什么它没有尝试从端口843加载文件
来源:哇。我刚从Socket.IO文档中读到: “闪存策略端口默认为10843 默认情况下,Socket.IO客户端将检查服务器上的端口10843,以查看是否允许flashsocket连接。Adobe Flash Player通常使用843作为默认端口,但我们决定默认为非根端口。“ 这就是为什么它没有尝试从端口843加载文件
来源:谢谢。我能够在我的服务器上正确设置flashpolicy服务器,并使用给定的命令测试它是否正常工作。我使用Security.loadPolicyFile(“);直接加载策略文件。但是,我收到以下错误:连接来自::ffff:88.8.71.155:55884无法识别的请求来自::ffff:88.8.71.155:55884:get/HTTP/1.1主机:23.29.126.76:843用户代理:Mozilla/5.0(Macintosh;英特尔Mac OS X 10_8_2)[…]例如,如果发出请求的字符串没有被识别。哦,我真傻。请求是'GET/HTTP/1.1',因为它试图直接访问文件。我想我可以通过给它一个正确的链接来解决它,但我仍然不明白为什么它不尝试从端口843的服务器获取.xml,或者我必须在AS3中执行一个函数才能生成它试图获取它?给它一个直接链接是不起作用的,它也不会尝试从843加载策略文件…感谢您更新您的答案。我已经使用了您提供的命令来检查策略服务器是否正确设置,并且确实正确。正如我在终端上看到的,Flash不会自动请求端口843上的文件,这对我来说似乎很奇怪,因为我到处都在读它应该从那里获得它。谢谢。我能够在我的服务器上正确设置flashpolicy服务器,并且我使用给定的命令测试它是否正常工作。我使用Security.loadPolicyFile(“);直接加载策略文件。但是,我得到了f
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*" to-ports="*"/>
</cross-domain-policy>