2011-06-29 63 views
0

我正在創建一個客戶端 - 服務器遊戲。我的客戶端是基於Flex的遊戲,我的服務器是erlang服務器。 開始時,當我直接在Flash Player中測試我的Flex客戶端時,我可以通過套接字連接輕鬆地建立與我的erlang服務器的連接。兩者都可以交換數據,沒有問題。Flex插座和erlang插座通信問題

當我在Apache http服務器上部署我的flex應用程序並使用瀏覽器通過調用http://localhost/運行它時,問題就出現了......我的flex套接字向我的erlang服務器發送請求跨域策略的消息。

因此,我創建了一個表示跨域策略的xml消息,並將其作爲該請求的響應發送回我的flex應用程序。

然而,我仍然無法在我的Flex客戶端和我的erlang服務器之間建立任何永久套接字連接。我知道這是因爲我在我的Flex套接字上添加了監聽器,如果客戶機 - 服務器之間的連接已經建立,它將修改其內部狀態爲CONNECTED。

+0

首先,你爲什麼將Flex用於遊戲?看起來像矯枉過正,爲可能只有很少UI的遊戲添加了一個UI框架庫(我在這裏假設......)。其次,爲什麼您使用自己的自定義套接字而不是使用廣泛可用的東西(AMF over long-polling(BlazeDS,GraniteDS)或RTMP(LCDS)),或者使用市售服務器(如Wowza或SmartFoxServer)。看起來像創建自己的套接字很多工作。 –

+0

如果你問我爲什麼要創建我自己的遊戲服務器......答案不是商業......但更多的是情感:) ... –

+0

好吧,好吧,那你爲什麼使用Flex? –

回答

0

我還沒有經歷過這個問題,但也許這會有所幫助。

默認的策略文件被命名爲 的crossdomain.xml並駐留在是 服務的數據... 可以使用的loadPolicyFile()方法來訪問非默認的策略文件服務器的 根目錄。

http://livedocs.adobe.com/flex/3/html/help.html?content=deployingoverview_12.html

由XMLSocket 服務器提供的策略文件具有相同的語法 其他政策文件,只是它必須 還指定了訪問 被授予端口。當一個策略文件來自低於1024的端口的 時,它可以向任何端口授予訪問權限,即 。當一個 策略文件來自端口1024或 更高時,它可以只允許訪問其他端口1024和更高的 。

http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00005403.html

+0

閱讀了關於Flash域策略的一些解釋之後......我發現了Flash Player過程如何跨域連接......並且我找到了這個鏈接:https://github.com/saulabs/flashpolicy-erlang ... this鏈接教我如何erlang套接字服務器管理跨域策略請求...也許我會嘗試執行github項目首先顯示我什麼...感謝所有的建議,我會盡快檢查你給我的所有鏈接... –

+0

好吧,這就是我所做的和成功的: 1)基於我在github(github.com/saulabs/flashpolicy-erlang)中找到的項目,以及關於策略文件如何工作的信息(http:// www.senocular.com/pub/adobe/crossdomain/policyfiles.html),我修改了我的服務器...來偵聽策略文件請求並返回加載的策略文件作爲響應,然後關閉連接。 2)在我的Flex客戶端收到一個策略文件後,它會嘗試重新連接,並且當一個新的連接建立時,閃爍的Event.CONNECT將會拋出,現在一切正常。 –

0

的flash播放器會限制插座的使用在幾個方面。一個你已經發現了:)另一個是指定你是否使用網絡。有一個聯網模式和一個文件系統模式(訪問文件系統)。你不能擁有兩個。

所以,你應該嘗試用這種編譯它:

-use-network=true 

是的,我知道這是一個PITA做套接字編程使用閃光燈。您應該實現每個OnErrorXYZ方法並儘可能多地輸出信息。使用wireshark或不同的網絡嗅探器也是一個好主意。