Tornadoを使ってみる
新しい技術を知っておきたいので、なんとなく興味があったTornadoをいじっています。TornadoはPythonで書かれたノンブロッキングなWebサーバとツールのことです。立ち位置は最近流行りのNode.jsと似たような感じですね。Webサーバーやフレームワークを含んだWebアプリケーションの環境といったとこでしょうか。
お決まりのHello, world(+α)からはじめました。ソースコードはgithubにあって、demos以下にいろいろサンプルがあるので親切だと思います。
以下は、Hello, worldとGETメソッドとPOSTメソッドのサンプルです。適切なとこに置いて実行すればサーバーが立ち上がるかと。
test.py
#!/usr/bin/env python import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web from tornado.options import define, options define("port", default=8888, help="run on the given port", type=int) class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") class TestHandler(tornado.web.RequestHandler): def get(self): self.write('<html><body><form action="/test" method="post">' '<input type="text" name="message">' '<input type="submit" value="Submit">' '</form></body></html>') def post(self): self.set_header("Content-Type", "text/plain") self.write("You wrote " + self.get_argument("message")) def main(): tornado.options.parse_command_line() application = tornado.web.Application([ (r"/", MainHandler), (r"/test", TestHandler), ]) http_server = tornado.httpserver.HTTPServer(application) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start() if __name__ == "__main__": main()
tornado.web.RequestHandlerを継承したリクエストハンドラ(上ではMainHandler、TestHandler)を作って、tornado.web.Applicationでマッピング(main関数のとこ)していく感じみたいです。
http://localhost:8888でHello, worldが表示されればオッケーです。http://localhost:8888/testにアクセスすればフォームが出てくるはずです。get()とpost()はそれぞれHTTPのGETとPOSTに対応しています。他のHTTPメソッド(PUT、DELETE、HEAD、OPTION)も使うことができて、何かしら実装しないとHTTPメソッドを処理できません。
ノンブロッキングのとこはあとで勉強する。