FriendFeedでは、Pythonで書かれた、比較的シンプルで、ノンブロッキング実装のされたウェブサーバを使用しています。FriendFeedアプリケーションは、web.pyや、Googleのwebappに良く似たウェブのフレームワークを使用して書かれていますが、このノンブロッキングウェブサーバと周辺ツールを利用することによるアドバンテージを生かして、追加のツールや最適化が行われています。
Tornadoはこのウェブサーバと、私たちがFriendFeedで頻繁に使用しているツールのうちのいくつかを含んだ、オープンソースバージョンです。このフレームワークはノンブロッキングで、適切な速さを備えているということで、主流となっている、ほとんどのウェブサーバフレームワーク(特に、ほとんどのPythonのフレームワーク)とは異なっています。速さの理由としては、ノンブロッキングで、なおかつepollを利用しているということがあげられ、その結果として数千のコネクションを同時に扱うことができます。これは、このフレームワークがリアルタイムのウェブサービスにとって理想的なものであるということを示しています。私たちは、主に、FriendFeedのリアルタイムで提供される機能をサポートするためにウェブサーバを開発しました。FrinedFeedのアクティブユーザは全員、FriendFeedに対してオープンなコネクションを常に張っています。数千のクライアントをサポートするためのサーバーのスケーリングの情報については、C10K問題を参照してください。
規律に従って、伝統の”Hello, world”のサンプルアプリケーションを紹介します:
import tornado.httpserver
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
tornado.web パッケージの詳細のウォークスルーについては、後半の章に書いてあります。
私たちは、モジュール間の相互依存性を減らそうと、コードベースをきれいにしようとしています。理論的には、パッケージ全体を使用するのではなく、必要なモジュールを個別に使用できるようにすべきです。
Tornadoの一番最新のバージョンGitHubからダウンロードします:
tornado-0.2.tar.gz
GitHub上でソースコードをブラウズすることもできます。Tornadoをインストールするには以下のようにします:
tar xvzf tornado-0.2.tar.gz
cd tornado-0.2
python setup.py build
sudo python setup.py install
インストールが終わったら、Tornadoのパッケージに含まれる demos ディレクトリ内のデモをいくつか実行してみてください:
TornadoはPython 2.5, 2.6でテストされています。Tornadoのすべての機能を使用するためには、PycURLとsimplejsonなどのJSONライブラリをインストールする必要があります。Mac OS XとUbuntuで必要なものを一括でインストールするには、以下のようにします。
sudo easy_install setuptools pycurl==7.16.2.1 simplejson
sudo apt-get install python-dev python-pycurl python-simplejson