Flash-Socket-Policy への応答を xinetd で行う
https://github.com/gimite/web-socket-js
Flash のソケット通信機能を経由すれば IE や現行の正式版の Firefox や Opera でも WebSocket と同じレベルの通信ができるということで、最近 gimite さんの web-socket-js を使ってみている。
Flash の場合アクセスを許可するためのポリシーファイルを配信しなければならないようなのだが、ServersMan@VPS の Debian には最初から xinetd が入っているようなのでこれを使って許可するようにしてみようと思う。
(もちろん WebSocket サーバ側で準備するのもいいけどポート843番は特権ポートなのでサーバをユーザ権限で動かしたい場合直接は listen できない模様)
まず /etc/services にポート843番に関する情報を追加する必要がある。
要求の内容もロクに確認しない適当スクリプトだけど Flash 経由で使えるようになったのでこれで問題ないようだ。
---- 2010-12-17 追記
ちゃんと受信してから返答しないと成功しないケースが多かったのでちゃんと内容を見るように修正。
Flash のソケット通信機能を経由すれば IE や現行の正式版の Firefox や Opera でも WebSocket と同じレベルの通信ができるということで、最近 gimite さんの web-socket-js を使ってみている。
Flash の場合アクセスを許可するためのポリシーファイルを配信しなければならないようなのだが、ServersMan@VPS の Debian には最初から xinetd が入っているようなのでこれを使って許可するようにしてみようと思う。
(もちろん WebSocket サーバ側で準備するのもいいけどポート843番は特権ポートなのでサーバをユーザ権限で動かしたい場合直接は listen できない模様)
まず /etc/services にポート843番に関する情報を追加する必要がある。
vim /etc/services
flsockpolicy tcp/843次に登録したポートに対応した応答用の定義を追加する。
vim /etc/xinetd.d/flsockpolicy
service flsockpolicy { disable = no wait = no socket_type = stream flags = IPv6 user = www-data group = www-data server = /usr/local/flsockpolicy/flsockpolicy }で、この server に書いた場所に実際に実行されるスクリプトファイルを設置する。
cd /usr/local/ mkdir flsockpolicy cd flsockpolicy vim flash-socket-policy.xml
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="flashが設置されているドメイン名" to-ports="アクセスを許可するポート番号"/> </cross-domain-policy>
vim flsockpolicy
#!/bin/sh read -n 23 INPUT if [ $INPUT = '<policy-file-request/>' ]; then cat /usr/local/flsockpolicy/flash-socket-policy.xml fi
chmod 700 flsockpolicy chgrp www-data * chown www-data *準備が終わったら xinetd をリロード。
invoke-rc.d xinetd reloadテストする。
telnet 127.0.0.1 843応答が返ってくるのが確認出来れば成功。
要求の内容もロクに確認しない適当スクリプトだけど Flash 経由で使えるようになったのでこれで問題ないようだ。
---- 2010-12-17 追記
ちゃんと受信してから返答しないと成功しないケースが多かったのでちゃんと内容を見るように修正。