Tornado写简易服务器

news/2024/7/6 2:04:19


文章来源:http://blog.csdn.net/ACdreamers/article/details/24668551


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

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


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

[python]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import redis  
  2. import datetime  
  3.   
  4. class Database:  
  5.     def __init__(self):  
  6.         self.host = 'localhost'  
  7.         self.port = 6379  
  8.         self.write_pool = {}  
  9.   
  10.     def add_write(self,website,city,year,month,day,deal_number):  
  11.         key = '_'.join([website,city,str(year),str(month),str(day)])  
  12.         val = deal_number  
  13.         self.write_pool[key] = val  
  14.   
  15.     def batch_write(self):  
  16.         try:  
  17.             r = redis.StrictRedis(host=self.host,port=self.port)  
  18.             r.mset(self.write_pool)  
  19.         except Exception, exception:  
  20.             print exception  
  21.               
  22.   
  23. def add_data():  
  24.     beg = datetime.datetime.now()  
  25.     db = Database()  
  26.     for i in range(1,10000):  
  27.         db.add_write('meituan','beijing',2013,i,1,i)  
  28.     db.batch_write()  
  29.     end = datetime.datetime.now()  
  30.     print end-beg  
  31.               
  32. if __name__ == '__main__':  
  33.     add_data()  


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


[python]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import json  
  2. import redis  
  3. import tornado.web  
  4. import tornado.httpserver  
  5. from tornado.options import define, options  
  6.   
  7. define("port", default=8888, type=int)  
  8.   
  9. class DealHandler(tornado.web.RequestHandler):  
  10.     def initialize(self):  
  11.         self.port = 6379  
  12.         self.host = "localhost"  
  13.   
  14.     def get(self):  
  15.         website = self.get_argument("website",None)  
  16.         city    = self.get_argument("city",None)  
  17.         year    = self.get_argument("year",None)  
  18.         month   = self.get_argument("month",None)  
  19.   
  20.         keyset = []  
  21.         for i in range(1,31):  
  22.             key = '_'.join([website,city,year,month,str(i)])  
  23.             keyset.append(key)  
  24.   
  25.         r = redis.StrictRedis(host=self.host,port=self.port)  
  26.         self.write( json.dumps(r.mget(keyset)) )  
  27.   
  28. class ExampleHandler(tornado.web.RequestHandler):  
  29.     def get(self):  
  30.         who = self.get_argument("who"None)  
  31.         if who:  
  32.             self.write("Hello, " + who)  
  33.         else:  
  34.             self.write("Hello World!")  
  35.           
  36.     def post(self):  
  37.         who = self.get_argument("who"None)  
  38.         if who:  
  39.             self.write("Hello, " + who)  
  40.         else:  
  41.             self.write("Hello World!")  
  42.   
  43. class Application(tornado.web.Application):  
  44.     def __init__(self):  
  45.         handlers = [  
  46.             (r"/", ExampleHandler),  
  47.             (r"/deal", DealHandler),  
  48.         ]  
  49.         settings = dict()  
  50.         tornado.web.Application.__init__(self, handlers, settings)  
  51.   
  52. def create_server():  
  53.     tornado.options.parse_command_line()  
  54.     http_server = tornado.httpserver.HTTPServer(Application())  
  55.     http_server.listen(options.port)  
  56.     tornado.ioloop.IOLoop.instance().start()  
  57.   
  58. if __name__ == "__main__":  
  59.     create_server()  

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


在浏览器中输入:


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


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



http://www.niftyadmin.cn/n/835740.html

相关文章

C++ 转型

1、const_static的使用场景:接收一个const对象,但是想改变对象内容,使用const_static去除对象的常量性,然后可以修改对象。 2、dynamic_static的使用场景:从子类向父类转化符合里氏代换,总是安全的。因此dy…

python字符串反转 高阶函数 @property与sorted(八)

(1)字符串反转 1倒序输出 s abcde print(s[::-1]) #输出: edcba 2 列表reverse()操作 s abcde lt list(s) lt.reverse() print(.join(lt)) #输出: edcba 3 二分法交换位置 s abcde lt list(s) for i in range(len(l) // 2):lt[i], lt[-(i1)] lt[-(i1)], lt[i] print(.joi…

《黑马头条》SpringBoot+SpringCloud+ Nacos等企业级微服务架构项目

环境搭建、SpringCloud微服务(注册发现、服务调用、网关) 1)课程对比 2)项目概述 2.1)能让你收获什么 2.2)项目课程大纲 2.3)项目概述 随着智能手机的普及,人们更加习惯于通过手机来看新闻。由于生活节奏的加快,很多人只能利用碎片时间来获取信息&#x…

通过maven-shade-plugin 解决Elasticsearch与hbase的jar包冲突问题

http://blog.csdn.net/sunshine920103/article/details/51659936 今天在项目中集成hbase1.0.0-cdh5.5.2和ElasticSearch2.2.0时出现了问题,原先在集成Hbase时,引入了架包com.google.guava(16.0版本),后来在集成ES时发现es中也用到了guava的18.0版本。这时…

Hive 安装操作

本篇为安装篇较简单:前提:1: 安装了hadoop-1.0.4(1.0.3也可以)正常运行2:安装了hbase-0.94.3, 正常运行接下来,安装Hive,基于已经安装好的hadoop,步骤如下:1:下载从http:…

Tomcat服务器 Tomcat应用案例 、 Varnish代理服务器

案例1:安装部署Tomcat服务器案例2:使用Tomcat部署虚拟主机案例3:使用Varnish加速Web1 案例1:安装部署Tomcat服务器1.1 问题 本案例要求部署Tomcat服务器,具体要求如下:安装部署JDK基础环境安装部署Tomcat服…

5、依赖倒转原则

一、基础知识 1、依赖倒转原则(依赖置换原则): A、高层模块不应该依赖低层模块。两个都应该依赖抽象。 B、抽象不应该依赖细节。细节应该依赖抽象。 2、只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类…

Android中windowTranslucentStatus与windowTranslucentNavigation的一些设置(转)

在iOS中,你可能发现页面会整体拉升到状态栏,整个页面效果就会显得更加的高端大气上档次,在Android4.4以后其实也有这种效果的实现,下面我就说一下在进行这种效果实现时碰到的一些坑,希望对大家有一些帮助吧。 首先来说…