关于Flash的Sockt通信与跨域文件

       最近在做客户端的断线重连的时候,发现客户端从断开网络连接到重新连接上有的时候需要耗费十几二十秒(目前主要指的是跨服行为,也就是断开连接后连接到其他host和端口),所以查了下为啥socket会需要花那么久。

      如果目标域是属于跨域的话,需要在目标域的根目录下放置crossdomian.xml文件,以允许第三方的flash数据请求。(其实也可以单独在某路径下放置仅对该路径和子路径生效的跨域文件,具体做法暂略)。flash发起socket的连接,会先检测跨域文件。会先连接flash的默认843端口去获取跨域文件,存在3秒的时间限制,如果在这个时间段内都没有找到,则再去指定的端口请求跨域文件,如果都没找到,则连接失败,触发SecurityErrorEvent.SECURITY_ERROR。

      使用 loadPolicyFile() 加载任意数量的策略文件。需要注意的是,调用了Security.loadPolicyFile()并不表示开始已经开始加载策略文件A,只有当开始进行socket连接时才开始。而且前面也已经说了,会在前3秒内检测默认843端口是否有合法策略文件,如果有,则不需要加载A了,如果没有,才需要。

    值得注意的是,对策略文件的请求,是会进行缓存的。比如在A端口请求策略文件,如果请求失败。那即使再重试几次,也无效的,内置的机制已经将结果缓存。同样,如果请求成功,获得安全许可,即使将服务端关闭,将安全策略服务停掉,再开服务端,再socket连接,其实也还能连上(swf不刷新的情况下)。

      如果你是在本机FlashBuilder或其他调试版直接测试跨域文件,可能是无法测试。因为开发环境下是不需要跨域文件的,你需要将swf放置到web服务器下,如IIS或阿帕奇Apache。

      socket连接ip port后,会检测跨域文件。也就是在我项目的这种情况下,跨域文件会影响socket的响应速度。测试环境下,我放置了错误的跨域文件或缺失跨域文件,socket connect 后大致20s后才有响应,触发SecurityErrorEvent.SECURITY_ERROR反馈,标志socket连接结束。

      By: http://www.menshow.cn

关注我: weibo.com/holycy
原文地址:https://www.cnblogs.com/holycy/p/3126715.html