• websocket通信 h5flash 兼容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通信可以完全不相干,不在同一个域和端口下。

     
     
  • 相关阅读:
    Git查询
    HDU-3038 How Many Answers Are Wrong 并查集
    CodeForcesEducationalRound40-D Fight Against Traffic 最短路
    HDU-6109 数据分割 并查集(维护根节点)
    ZOJ-3261 Connections in Galaxy War 并查集 离线操作
    AtCoderBeginner091-C 2D Plane 2N Points 模拟问题
    HDU-1878 欧拉回路 欧拉回路
    [笔记-图论]Floyd
    [笔记-图论]Bellman-Ford
    [笔记-图论]Dijkstra
  • 原文地址:https://www.cnblogs.com/websjs/p/7484724.html
走看看 - 开发者的网上家园