首页 > 代码库 > Tornado写简易服务器

Tornado写简易服务器

我们都知道在Web开发中,都需要服务器,比如Java Web开发的Tomcat,WebLogic,WebSphere,现在来看利

Tornado Web Server框架如何写一个简易的Python服务器。


一般来说只需要实现get和post方法就可以了。以上次使用redis数据库的例子说明,数据库插入代码如下:

import redis
import datetime

class Database:
    def __init__(self):
        self.host = ‘localhost‘
        self.port = 6379
        self.write_pool = {}

    def add_write(self,website,city,year,month,day,deal_number):
        key = ‘_‘.join([website,city,str(year),str(month),str(day)])
        val = deal_number
        self.write_pool[key] = val

    def batch_write(self):
        try:
            r = redis.StrictRedis(host=self.host,port=self.port)
            r.mset(self.write_pool)
        except Exception, exception:
            print exception
            

def add_data():
    beg = datetime.datetime.now()
    db = Database()
    for i in range(1,10000):
        db.add_write(‘meituan‘,‘beijing‘,2013,i,1,i)
    db.batch_write()
    end = datetime.datetime.now()
    print end-beg
            
if __name__ == ‘__main__‘:
    add_data()


以上代码插入了数据,那么现在用我们的服务器来访问一些数据。


import json
import redis
import tornado.web
import tornado.httpserver
from tornado.options import define, options

define("port", default=8888, type=int)

class DealHandler(tornado.web.RequestHandler):
    def initialize(self):
        self.port = 6379
        self.host = "localhost"

    def get(self):
        website = self.get_argument("website",None)
        city    = self.get_argument("city",None)
        year    = self.get_argument("year",None)
        month   = self.get_argument("month",None)

        keyset = []
        for i in range(1,31):
            key = ‘_‘.join([website,city,year,month,str(i)])
            keyset.append(key)

        r = redis.StrictRedis(host=self.host,port=self.port)
        self.write( json.dumps(r.mget(keyset)) )

class ExampleHandler(tornado.web.RequestHandler):
    def get(self):
        who = self.get_argument("who", None)
        if who:
            self.write("Hello, " + who)
        else:
            self.write("Hello World!")
        
    def post(self):
        who = self.get_argument("who", None)
        if who:
            self.write("Hello, " + who)
        else:
            self.write("Hello World!")

class Application(tornado.web.Application):
    def __init__(self):
        handlers = [
            (r"/", ExampleHandler),
            (r"/deal", DealHandler),
        ]
        settings = dict()
        tornado.web.Application.__init__(self, handlers, settings)

def create_server():
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(Application())
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    create_server()

以上代码实现了一个简单的服务器,用于处理http请求。


在浏览器中输入:


http://localhost:8888/deal?website=meituan&city=beijing&year=2013&month=9


即可得到需要的数据。。。