HDEラボの桜井です。
昨日とは打って変わって、渋谷は天気いいっす。
こんなときはゆっくりと散歩でもして、新製品のアイデアでも練りたいところですが...。
今日はちょっとしたメモ。
前回Twistedについて書いたときに(これ)、echo.tacというサンプルを載せたと思います。
実行順序としては、下記のようになります。
・Factoryクラスのインスタンスを生成する
↓
・Protocolクラスのサブクラスのインスタンスを生成する
↓
・デーモンとして常駐
じゃあ、Protocolクラスの初期化は一回だけなのか?
っていうことが疑問に思ったわけです。
昨日とは打って変わって、渋谷は天気いいっす。
こんなときはゆっくりと散歩でもして、新製品のアイデアでも練りたいところですが...。
今日はちょっとしたメモ。
前回Twistedについて書いたときに(これ)、echo.tacというサンプルを載せたと思います。
実行順序としては、下記のようになります。
・Factoryクラスのインスタンスを生成する
↓
・Protocolクラスのサブクラスのインスタンスを生成する
↓
・デーモンとして常駐
じゃあ、Protocolクラスの初期化は一回だけなのか?
っていうことが疑問に思ったわけです。
では、下記のプログラムで確認してみましょう。
echo.tac
プログラムを動作させるためには、下記のように実行してデーモン化します。
さらに下記のようにTelnetで接続すると、普通にEchoサーバとなります。
これを何度か接続を切りながらやってみます。
同じディレクトリにあるtwistd.logを見ると、接続をするたびに "INIT"という文字列が出力されているのがわかると思います。
これらのことから、リクエストのたびにProtocolクラスのサブクラスのインスタンスが生成されていることがわかります。
無論、Factoryクラスのインスタンス生成は一度だけでした。
まあ、どこでデータを初期化したり保持したりすれば良いか、参考になればいいなという、ただのメモでした。
echo.tac
from twisted.internet.protocol import Protocol,Factory from twisted.application import service,internet class Echo(Protocol): def __init__(self): print "INIT" def dataReceived(self, data): self.transport.write(data) self.transport.loseConnection() factory = Factory() factory.protocol = Echo myServer = internet.TCPServer(2345, factory) application = service.Application('Echo') myServer.setServiceParent(application)
プログラムを動作させるためには、下記のように実行してデーモン化します。
$ twistd -oy echo.tac
さらに下記のようにTelnetで接続すると、普通にEchoサーバとなります。
これを何度か接続を切りながらやってみます。
$ telnet localhost 2345 helo helo Connection closed by foreign host.
同じディレクトリにあるtwistd.logを見ると、接続をするたびに "INIT"という文字列が出力されているのがわかると思います。
2008-11-13 14:24:31+0900 [-] Log opened. 2008-11-13 14:24:31+0900 [-] twistd 8.1.0 (/usr/bin/python 2.4.3) starting up 2008-11-13 14:24:31+0900 [-] reactor class:2008-11-13 14:24:31+0900 [-] twisted.internet.protocol.Factory starting on 2345 2008-11-13 14:24:31+0900 [-] Starting factory 2008-11-13 14:24:35+0900 [twisted.internet.protocol.Factory] INIT 2008-11-13 14:24:46+0900 [twisted.internet.protocol.Factory] INIT 2008-11-13 14:24:50+0900 [twisted.internet.protocol.Factory] INIT
これらのことから、リクエストのたびにProtocolクラスのサブクラスのインスタンスが生成されていることがわかります。
無論、Factoryクラスのインスタンス生成は一度だけでした。
まあ、どこでデータを初期化したり保持したりすれば良いか、参考になればいいなという、ただのメモでした。
Leave a comment