私の理解がただしければという前提なんですが、ここ3回くらいポストした内容の概要をまとめますと
Twistedというのがありまして、ネットワーク系のプログラムが作り易いPythonのライブラリなんですが、それを利用して自分でPythonのプログラムを書き、twistdという名前のコマンド(こちらもPythonで書かれている)で実行することで、そのプログラムがデーモンとして動くわけです。
Twistedを利用することで、自分で書く部分のプログラムが、とても分かり易いものになるなあと思った記憶が1年くらい前にあります。
さてそれはともかく、Flashからチャットとかするためにサーバーにソケット通信というのをやる場合、2つのサーバーが必要になります。
1.ソケットサーバー 2.ソケットポリシーサーバー
です。ということはつまり、Flashからソケット通信するためには、ソケットサーバーとソケットポリシーサーバーそれぞれ1つづつ起動することになります。(必ずしもそうではないだろうと言われればそうかもしれませんが、ここでは面倒なことは考えたくないので2つです。)
もちろん2つといってもデーモンが2つということで、1つのハードウェアで1000個のデーモンを動かしても良いわけだから、物理的なマシンの数の話ではありません。
加えて、もし1台のマシンでFlashもソケットサーバーも動かす場合は、2のソケットポリシーサーバーは要らないです。Flashのセキュリティーポリシーではローカルのソケットサーバーならポリシーサーバーなしで自由に接続できるからです。
前々前回のエントリのコードが1のソケットサーバーで、
前々回のエントリのコードが2のソケットポリシーサーバーで、
それらにFlashから接続確認するためのコードが前回の奴です。
Flashはまず先に2のソケットポリシーサーバーにソケット通信を843番ポートで行って、自分のソケット通信の権限を確認します。もしそこで権限があることがわかれば、1のソケットサーバーに接続しに行きます。
ちなみに、それぞれのポストの先頭に追記したとおり、Twistedというシステム(エンジンとかフレームワークとかライブラリと言えるもの)と、twistdというコマンドを取り違えて、Twistedと書くべきところをtwistdと書いてしまっていました。
それから今日指摘されて気がつきましたが、twistdでデーモンを起動するにあたって少なくともMacの場合は
python twistd -y xxxxx.py
ではダメでした。
python /usr/bin/twistd -y xxxxx.py
としないとなりませんでした。1と2両方を起動するので
python /usr/bin/twistd -y ポリシーサーバー.py
python /usr/bin/twistd -y ソケットサーバー.py
という風になります。ただ、やってみて思い出しましたがpidファイルがあるからだと思いますが、同じカレントディレクトリでは2つは起動できなかったので、2つのディレクトリを用意して、そのディレクトリにpyファイルを持って行ってそれぞれそのディレクトリで起動します。もちろんそうでないやり方でもいけると思いますが、私はそうしたという話です。
それから、ファイアーウォールとかを使っているのであれば、ソケットサーバーは任意なので利用するポート、ソケットポリシーサーバーは843番のポートをオープンにしておく必要があります。
あと停止するときのことは書いていませんでしたが
ps ax | grep python
とかして動作中のデーモンのプロセスIDを探して
kill プロセスID
すれば良いです。
といろいろ書いたものの、間違ったことを書いている可能性がそこそこ高いので参考迄にということでお願いいたします。
書いた本人ですけど、読み返したら「うわー分かりにくい文章」って思いました。いつもこうなんですよねえ。ちゃんとした文章を書こうとすると、そういう能力が低いからかものすごい時間がかかってしまうのです。最後迄読んでくれた方が居たら、申し訳ないです。
投稿情報: ks | 2010年6 月16日 (水) 00:30