建立Socket Policy服務器
(金慶的專欄)
Flash和Unity3D游戲服務器需要開啟一個Socket Policy服務器。
詳細說明見:Setting up a socket policy file server
http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html
協議如下:
Flash或U3D播放器向Socket Policy服務器發送請求:
“<policy-file-request/>\0”,
服務器返回一個xml文本,其中有包含<cross-domain-policy>配置。
Adobe提供了Perl和Python代碼。Unity3D提供了CSharp代碼。
cs代碼用于Windows. Linux上準備使用Python代碼。
在以上網頁下載:flashpolicyd_v0.6.zip。
其中有3個版本:init服務,xinetd服務,獨立應用。只需一種即可。
按應用的性質,請求量極小,所以最適合應用xinetd.
只需運行其中的install.sh就會安裝。
還需手工在/ect/services中添加服務名flashpolicy和端口843.
運行以下指令可以測試一下,輸出應該是配置文件的內容。
python -c 'print "<policy-file-request/>%c" % 0' | nc 127.0.0.1 843
其實以上測試指令在尾部多了個'\n', 不是標準的測試。
在in.flashpolicyd.py中多了個strip()去除這個'\n'.
實際用U3D測試時,因為沒有'\n'結尾,所以in.flashpolicyd.py無法正常工作。
需要將35行readline()如下更改:
request = sys.stdin.readline().strip()
改為
request = sys.stdin.readline(len('<policy-file-request/>\0')).strip()
這樣就不需要eol就可以讀取了。
查看其他兩個版本的代碼沒有這個錯誤,但是有另一個錯誤,
即有可能只讀一半的請求造成判斷出錯。
還有一個問題是因為服務是由nobody運行的,環境變量不同,
將in.flashpolicyd.py頭部的
#!/usr/bin/env python
明確為
#!/usr/local/sbin/python
可避免調用低版本的python而報錯。
(金慶的專欄)
Flash和Unity3D游戲服務器需要開啟一個Socket Policy服務器。
詳細說明見:Setting up a socket policy file server
http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html
協議如下:
Flash或U3D播放器向Socket Policy服務器發送請求:
“<policy-file-request/>\0”,
服務器返回一個xml文本,其中有包含<cross-domain-policy>配置。
Adobe提供了Perl和Python代碼。Unity3D提供了CSharp代碼。
cs代碼用于Windows. Linux上準備使用Python代碼。
在以上網頁下載:flashpolicyd_v0.6.zip。
其中有3個版本:init服務,xinetd服務,獨立應用。只需一種即可。
按應用的性質,請求量極小,所以最適合應用xinetd.
只需運行其中的install.sh就會安裝。
還需手工在/ect/services中添加服務名flashpolicy和端口843.
運行以下指令可以測試一下,輸出應該是配置文件的內容。
python -c 'print "<policy-file-request/>%c" % 0' | nc 127.0.0.1 843
其實以上測試指令在尾部多了個'\n', 不是標準的測試。
在in.flashpolicyd.py中多了個strip()去除這個'\n'.
實際用U3D測試時,因為沒有'\n'結尾,所以in.flashpolicyd.py無法正常工作。
需要將35行readline()如下更改:
request = sys.stdin.readline().strip()
改為
request = sys.stdin.readline(len('<policy-file-request/>\0')).strip()
這樣就不需要eol就可以讀取了。
查看其他兩個版本的代碼沒有這個錯誤,但是有另一個錯誤,
即有可能只讀一半的請求造成判斷出錯。
還有一個問題是因為服務是由nobody運行的,環境變量不同,
將in.flashpolicyd.py頭部的
#!/usr/bin/env python
明確為
#!/usr/local/sbin/python
可避免調用低版本的python而報錯。