2015-03-03 59 views
0

讓我一步步介紹我的問題:如何在特定端口上提供crossdomain.xml文件?

我在地址www.mydomain.com:1925上使用套接字連接爲我的用戶提供聊天服務。當我轉移到cloudflare時,我無法直接連接到端口1925,因爲我的請求通過cloudflare到達了我的原始服務器,並且端口正在改變。

我是如何解決它的? 我創建了一個子域名chat.mydomain.com,其DNS設置指向我的原始服務器而不是cloudflare。我通過這種方式繞過了cloudflare,並通過在瀏覽器上使用chat.mydomain.com:1925連接了我的聊天服務。到現在爲止還挺好。

這是問題所在。 我也在使用Flash和AS3。這是我在網站上的遊戲核心。聊天工作在HTML和我的Flash遊戲在我的網站的一部分。在flash中,我發送了幾十個玩家在www.mydomain.com:1925上通過一個不同的命名空間重新使用套接字連接(由於swf的主機和url的主機匹配,我沒有任何問題,我想)。將域名更改爲chat.mydomain.com:1925,Flash開始請求chat.mydomain.com:1925上的crossdomain.xml。 chat.mydomain.com上有一個crossdomain.xml文件,但無法通過chat.mydomain.com:1925提供。以下是我的代碼:

Security.loadPolicyFile("https://chat.mydomain.com/crossdomain.xml"); 
var urlLoader:URLLoader = new URLLoader(); 
var url:String = "https://chat.mydomain.com:1925/socket.io/1/";         

var request:URLRequest = new URLRequest(url); 
request.method = URLRequestMethod.POST;  

urlLoader.dataFormat = URLLoaderDataFormat.TEXT; 
urlLoader.addEventListener(Event.COMPLETE, completeHandler); 
urlLoader.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler); 
urlLoader.load(request); 

由於Flash無法通過獲取404找到crossdomain.xml,所以我的代碼中的請求不起作用。我怎麼解決這個問題?

回答

0

我已經解決了這個問題。 URLRequest試圖連接https://chat.example.com:1925/socket.io/1/。由於swf位於域https://www.example.com,瑞士法郎要求https://chat.example.com:1925/crossdomain.xml。該端口並不瞭解https,因爲它用於我的websocket。所以我找不到在swf中調用這個請求的方法。然後,我想出了一個想法,我可以在swf之外調用這個url。由於我只需要握手,我通過javascript調用了這個函數。得到迴應之後,我通過將handshakeid作爲參數加載了swf。這解決了我的問題。對於需要動態調用此類功能的用戶,他們可以使用ExternalInterface調用。我希望它有幫助。

相關問題