【Tornado】Tornado简单服务器搭建(简单的例子)

官方网站:http://old.sebug.net/paper/books/tornado/

 

FriendFeed使用了一款使用 Python 编写的,相对简单的 非阻塞式 Web 服务器。其应用程序使用的 Web 框架看起来有些像 web.py 或者 Google 的 webapp, 不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。

Tornado 就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题)

 

 

以下是经典的 “Hello, world” 示例:

 
  1. import tornado.ioloop

  2. import tornado.web

  3.  
  4. class MainHandler(tornado.web.RequestHandler):

  5. def get(self):

  6. self.write("Hello, world")

  7.  
  8. application = tornado.web.Application([

  9. (r"/", MainHandler),

  10. ])

  11.  
  12. if __name__ == "__main__":

  13. application.listen(8888)

  14. tornado.ioloop.IOLoop.instance().start()

 

写过的一个例子:

IN:http://10.10.177.179:10081/slquery?dept=PEK&dest=CDG&type=flight&pay_method=mioji

OUT:源列表

 

 
  1. #!/usr/bin/python

  2. #! -*- coding:utf-8 -*-

  3.  
  4. import tornado.httpserver

  5. import tornado.ioloop

  6. import tornado.options

  7. import tornado.web

  8. import json

  9. import sys

  10. sys.path.append('/home/workspace/ProxyServer/bin')

  11. sys.path.append('/home/fangwang/statistic_scripts/')

  12. import os

  13. from DBHandle import DBHandle

  14. import re

  15.  
  16. monitor_source = DBHandle("10.10.87.87","root","miaoji@2014!","devdb")

  17.  
  18.  
  19. source_mioji_dict=dict()

  20. source_self_mioji_dict=dict()

  21. source_raw=[]

  22. flight_validation_dict=dict()

  23.  
  24. def init_source_tab():

  25. #初始化源列表

  26. res=monitor_source.QueryBySQL("SELECT * FROM source WHERE pay_method != 'NULL'")

  27. for line in res:

  28. if line['pay_method'].find('mioji') != -1:

  29. tmp_type=line['type']

  30. source_mioji_dict.setdefault(tmp_type,[])

  31. source_mioji_dict[tmp_type].append(line['name'])

  32. elif line['pay_method'] == 'self+mioji':

  33. tmp_type=line['type']

  34. source_self_mioji_dict.setdefault(tmp_type,[])

  35. source_self_mioji_dict[tmp_type].append(line['name'])

  36.  
  37.  
  38. def init_flight_validation_tab():

  39. #初始化过滤列表

  40. res=monitor_source.QueryBySQL("SELECT * FROM flight_validation where status != 0")

  41. for line in res:

  42. if line['type']=='oneway':

  43. key=line['dept_id']+'|'+line['dest_id']

  44. flight_validation_dict.setdefault(key,[])

  45. flight_validation_dict[key].append(line['source'])

  46.  
  47. def add_source(_type,pay_method):

  48. #取出source所有源

  49. source_list=[]

  50. global source_raw

  51. if _type == 'flight':

  52. if pay_method == 'mioji':

  53. source_raw=source_mioji_dict['flight_one_way']

  54. elif pay_method == 'self+mioji':

  55. source_raw=source_self_mioji_dict['flight_one_way']

  56. for source in source_raw:

  57. source_list.append(source)

  58. return source_list

  59.  
  60. def validation_source(dept,dest,_type,source_list):

  61. #过滤source表

  62. if _type == 'flight':

  63. source_validation=[]

  64. key=dept+'|'+dest

  65. if key not in flight_validation_dict.keys():

  66. source_validation.append('ctripFlight')

  67. source_validation.append('expediaFligh')

  68. return source_validation

  69. tmp_source = flight_validation_dict[key]

  70. for source in source_raw:

  71. if source in tmp_source:

  72. source_validation.append(source)

  73. if len(source_validation)<=1:

  74. source_validation.append('ctripFlight')

  75. source_validation.append('expediaFlight')

  76. return source_validation

  77. class hello(tornado.web.RequestHandler):

  78. def get(self):

  79. print self.request

  80. try:

  81. dept = self.get_argument('dept')

  82. except:

  83. print 'put in dept error'

  84. try:

  85. dest = self.get_argument('dest')

  86. except:

  87. print 'put in dest error'

  88. try:

  89. pay_method = self.get_argument('pay_method')

  90. except:

  91. print 'put in pay_method error'

  92. try:

  93. trans_type = self.get_argument('type')

  94. except:

  95. print 'put in trans_type error'

  96. print("dept: %s, dest: %s, trans_type: %s, pay_method: %s" % (dept, dest, trans_type,pay_method))

  97. source_list = []

  98. #根据类型计算source_list

  99. #...

  100.  
  101. source_list = add_source(trans_type,pay_method)

  102. source_list = validation_source(dept,dest,trans_type,source_list)

  103.  
  104. source_list = list(set(source_list))

  105. if 'mioji' in source_list:

  106. source_list.remove('mioji')

  107.  
  108. self.write(json.dumps(source_list))

  109.  
  110. if __name__ == '__main__':

  111. init_source_tab()

  112. init_flight_validation_tab()

  113. print 'inited over'

  114. application = tornado.web.Application([

  115. (r"/slquery", hello)

  116. ])

  117. http_server = tornado.httpserver.HTTPServer(application)

  118. http_server.listen(10081)

  119. http_server.start()

  120. tornado.ioloop.IOLoop.instance().start()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值