読者です 読者をやめる 読者になる 読者になる

サンゴラボ

4年目ソシャゲエンジニア

Tornadoを使ってみる

Python 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メソッドを処理できません。

ノンブロッキングのとこはあとで勉強する。