Flash安全策略解决方案

问题

      在研究《Flash游戏编程教程》的游戏实例《冲出重围》的时候,直接运行客户端和socket服务程序后,游戏可以正常运行。但是将flash文件发布成网页后,拷贝和修改crossdomain.xml文件,并将相关文件放在IIS根目录下进行运行,游戏将无法继续进行。采用其他监视工具查看,服务器端会收到<policy-file-request/>的错误消息。

原因:

      在Adobe Flash Player升级到9.0.124后,由于安全策略的更改,使得在socket或xmlsocket的应用里,原先如用http方式加载安全策略的手段不能继续使用了,类似此类应用必须使用xmlsocket://方式来提供安全策略。

分析:

     Flashplayer的安全策略检测过程如下:

   1,首先检测目标服务器的843端口是否提供安全策略。
     2,如果1没有检测到策略,则检测actionscript是否使用了Security.loadPolicyFile(xmlsocket://) 手段提供安全策略,如果还没检测到,则使用第3步检测。
     3,检测目标服务器目标端口是否提供安全策略。

     如果上述检测都不成功,则socket或xmlsocket则拒绝连接目标服务器。

解决方法:

     根据以上的分析,有3种方式的解决方案

     方法一:

     在游戏服务器绑定843端口,当监听到请求后转发安全策略,就发送以下安全策略内容:
<cross-domain-policy><site-control permitted-cross-domain-policies=/"all/"/><allow-access-from domain=/"xxx.com/" to-ports=/"8999/" /></cross-domain-policy>/0
记得后面加上/0,不然FLASH会以为数据没有接收完。一切OK。

     官方也提供了在具体的服务器环境下配置的方法,较繁琐。

http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html

     方法二:

     在Flash客户端的XmlSocket派生类中使用了Security.loadPolicyFile(“xmlsocket://www.xxx.com:port”) 手段,即是加入提供安全策略的服务器地址。(当然它也可以跟游戏服务器是同一台机器,大型的游戏架构应该有专门的这种服务器吧,因为它也可以起到负载平衡的作用)提供安全策略的服务器转发的内容应该和方法一的内容一致。

    方法三:

    当游戏服务器接受socket绑定时,向客户端发送安全策略内容。本人直接修改了教程提供的服务器端程序,运行游戏,一切OK,在此提供链接。

修改过的相关类

完整的解决方案

 

游戏运行界面:

游戏运行图片 

 

讨论:

       问题1:问什么游戏实例在没有发布成网页时可以正常运行,发布后却不行了?

       答:查看里面的Messager代码发现,它加载服务器安全策略的方法:Security.loadPolicyFile("127.1.1.1/crosadomain.xml");你会发现它不是"http://"或"xmlsocket:"的方式。游戏实例通讯采用的是xmlsocket的方式,所以它必须使用socket的方式去获取策略内容。"http://"方式在FlashPlayer9.0以前是支持的,但是9.0以上版本就不支持了,本人也测试过"http"的方式来获取策略内容,确实是不起作用。除非你的游戏是基于http的方式进行设计,但是客户端必须依靠轮询的方式去获取数据,这种方式太多缺陷了,已经慢慢给淘汰了。

       问题2:大型web游戏是如何部署策略文件的?

       答:大型web游戏在设计上如有可能,应该考虑尽量支持多个FlashPlay版本,它在虚拟目录上应该有crosadomain.xml策略文件,也就是说它支持旧版的http方式获取和socket方式获取。偶也不是游戏公司,今天到“坦克大作战”那里测试了下,果然可以下载到这个文件。具体的架构需要专业人士解答,哈哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值