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通信可以完全不相干,不在同一個域和端口下。

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM