2005-10-24

使用 XMLSocket 連至 socket server 80 port

這是 Flash 的老問題了
Luar 提到的相關訊息 Port 80的XML Socket Server
原廠也有詳細說明 Security Changes in Macromedia Flash Player 7
看了一些文章之後, 沒有實作還是很難了解。
最近剛好面臨這個問題, 把以前的東西改改, 實作之後就豁然開朗了。

XMLSocket 要連至 Server 的 80 port 的原因,
幾乎都是為了避開防火牆,讓更多的使用者可以使用我們所提供的資料。

在這種情形下, 原則上會使用兩台主機, 一台是 Socket Server,
另外一台是 Web Server,兩者當然都使用 80 port 提供服務。

在 Flash, 使用下式設定取得 Socket Server 的
cross-domain-policy 內容 (請變更 Domain name) :
System.security.loadPolicyFile(
"xmlsocket://shinder.idv.tw:80");
Server 端如何知道 Client 要取 cross-domain-policy 內容?
Client 會透過 Socket 送 null 結尾的<policy-file-request/> 字串給 Server。

Server 收到要求的訊息之後, 必須將原本crossdomain.xml
的內容傳給 Client, 例如:

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="192.168.1.3" to-ports="80" />
<allow-access-from domain="localhost" to-ports="80" />
<allow-access-from domain="*.shinder.org" to-ports="80" />
</cross-domain-policy>
Server 將所需的資料傳給 Client 之後就必須斷線, 以利後續的連線連接。
另外, 使用時應該注意 Flash Player 的版本必須在 7,0,19,0 以上。

FB 留言