websocket通信 h5\flash 兼容ie

H5新功能websocket不用说了,现代浏览器都支持,拿起来就可以用。接下来主要分享下socket通信兼容ie:

方案:flash socket;

前段代码:https://github.com/gimite/web-socket-js;

主要用到里面的3个文件:swfobject.js;web_socket.js;WebSocketMain.swf/WebSocketMainInsecure.swf;

这个方案兼容了websocket和flash socket;

 如果您的html与*.swf不在同一个域,*.swf文件就要改用WebSocketMainInsecure.swf

 

假如现在在ie8上运行:那么这个flash socket会做两件事情:

1:请求 策略文件也就是crossdomain.xml。

2:根据请求策略文件的结果决定是否发起socket链接请求。

flash 有3中方法完成第一件事情:(1) 请求 加载******.swf的域的843端口(843是flash默认的),与843端口建立连接,发送字符串"<policy-file-request/>"到843端口,如果返回crossdomain.xml或者是xml的内容字符串,flash会检测你要发起的socket请求的域和端口是否在xml文件允许范围内,如果在。就断开当前与843端口的链接。发起你socket连接地址的请求(example.com:10081)。

(2) 在****.swf内部写入加载策略文件的方法 Security.loadPolicyFile(“xmlsocket://www.xxx.com:1234”),flash就会按照这个路径加载策略文件,

(3)flash到你要建立的socket链接的域和端口下加载策略文件,

上面的3种方法,flash会依次尝试去做,如果哪一个成功加载了策略文件,后面的方法就不会使用了。接下来做第二件事情:

根据返回的策略文件内容 和 接下来要发起的socket连接对比。

检测域:example.com和端口:10081,是否在允许请求,如果允许flash会发起socket连接请求。不允许的话会报错。

如果报错说,html的域要与***.swf的与一样的话就在 new socket('.....')之前加上这一句:WEB_SOCKET_SUPPRESS_CROSS_DOMAIN_SWF_ERROR = true;



 

 flash做的两件事情就是建立两个tcp连接,第一个加载策略文件的tcp,加载成功与否最后都会断开,第二个实现socket通信,两个tcp通信可以完全不相干,不在同一个域和端口下。

 
 
posted @ 2017-09-06 14:43  websjs  阅读(3958)  评论(0编辑  收藏  举报