高性能tornado框架简单实现restful接口及运维开发实例
来源:互联网 发布:繁体转简体 word mac 编辑:程序博客网 时间:2024/05/21 06:24
1
pip install tornado
1
2
3
4
5
6
7
8
9
10
class
MainHandler(tornado.web.RequestHandler):
def
get
(self):
self.write(
"You requested the main page"
)
class
niubi(tornado.web.RequestHandler):
def
get
(self, story_id):
self.write(
"xiaorui.cc niubi'id is "
+ story_id)
application = tornado.web.Application([
(r
"/"
, MainHandler),
(r
"/niubi/([0-9]+)"
, niubi),
])
1
2
3
4
5
6
7
8
9
class
MainHandler(tornado.web.RequestHandler):
def
get
(self):
self.write(
'<html><body><form action="/" 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(
"xiaorui.cc and "
+ self.get_argument(
"message"
))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import
tornado.ioloop
import
tornado.web
import
json
class
hello(tornado.web.RequestHandler):
def
get
(self):
self.write(
'Hello,xiaorui.cc'
)
class
add(tornado.web.RequestHandler):
def post(self):
res = Add(json.loads(self.request.body))
self.write(json.dumps(res))
def Add(input):
sum = input[
'num1'
] + input[
'num2'
]
result = {}
result[
'sum'
] = sum
return
result
application = tornado.web.Application([
(r
"/"
, hello),
(r
"/add"
, add),
])
if
__name__ ==
"__main__"
:
application.listen(
8888
)
tornado.ioloop.IOLoop.instance().start()
#大家可以写个form测试,也可以用curl -d测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@tornado.web.asynchronous
def post(self):
""
"Handle POST requests."
""
# Disable caching
self.set_header(
"Cache-Control"
,
"no-cache, must-revalidate"
)
self.set_header(
"Expires"
,
"Mon, 26 Jul 1997 05:00:00 GMT"
)
self.poll_start = time.time()
action = self.get_argument(
"action"
)
if
action==
"poll"
:
self.poll()
elif action==
"message"
:
self.process_incoming(self.get_argument(
"message"
))
else
:
self.set_status(
400
)
self.finish()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import
json
from tornado.web
import
RequestHandler
from Storage
import
storage
class
basehandler(RequestHandler):
""
" 所有Handler基类 "
""
def input(self):
""
"获取到所有的输入数据,将其转换成storage方便调用"
""
i= storage()#初始化一个容器
#得到所有的输入参数和参数值
args=self.request.arguments
#将参数写入i的属性
for
a
in
args:
i[a]=self.get_argument(a)
#获取file类型的参数
i[
"files"
]=storage(self.request.files)
#获取path
i[
"path"
]=self.request.path
#获取headers
i[
"headers"
]=storage(self.request.headers)
return
i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from datetime
import
date
import
tornado.
escape
import
tornado.ioloop
import
tornado.web
class
VersionHandler(tornado.web.RequestHandler):
def
get
(self):
response = {
'version'
:
'3.5.1'
,
'last_build'
: date.today().isoformat() }
self.write(response)
class
GetGameByIdHandler(tornado.web.RequestHandler):
def
get
(self, id):
response = {
'id'
:
int
(id),
'name'
:
'Crazy Game'
,
'release_date'
: date.today().isoformat() }
self.write(response)
application = tornado.web.Application([
(r
"/getgamebyid/([0-9]+)"
, GetGameByIdHandler),
(r
"/version"
, VersionHandler)
])
if
__name__ ==
"__main__"
:
application.listen(
8888
)
tornado.ioloop.IOLoop.instance().start()
1
2
3
4
class
MainHandler(tornado.web.RequestHandler):
def
get
(self):
items = [
"Item 1"
,
"Item 2"
,
"Item 3"
]
self.render(
"template.html"
, title=
"My title"
, items=items)
1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<ul>
{%
for
item
in
items %}
<li>{{
escape
(item) }}</li>
{% end %}
</ul>
</body>
</html>
1
2
3
4
5
6
7
8
def MainHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def
get
(self):
client = tornado.httpclient.AsyncHTTPClient()
def callback(response):
self.write(
"Hello World"
)
self.finish()
client.fetch(
"http://www.google.com/"
, callback)
1
2
3
4
5
6
7
class
SleepHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
@tornado.gen.coroutine
def
get
(self):
a = yield tornado.gen.Task(call_subprocess,self,
"sleep 10"
)
print
'111'
,a.read()
self.write(
"when i sleep 5s"
)
1
2
3
4
5
6
7
class
GenAsyncHandler(RequestHandler):
@asynchronous
@gen.engine
def
get
(self):
http_client = AsyncHTTPClient()
response = yield gen.Task(http_client.fetch,
"http://xiaorui.cc"
)
self.render(
"template.html"
)
1
http_client = httpclient.HTTPClient()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import
tornado.ioloop
as
ioloop
import
tornado.httpclient
as
httpclient
import
time
start = time.time()
step =
3
;
def handle_request(response):
global step
if
response.error:
print
"Error:"
, response.error
else
:
print response.body
step -=
1
if
not step:
finish()
def finish():
global start
end = time.time()
print
"一共用了 Used %0.2f secend(s)"
% float(end - start)
ioloop.IOLoop.instance().stop()
http_client = httpclient.AsyncHTTPClient()
#这三个是异步执行的,大家可以多试试几个url,或者自己写个接口
http_client.fetch(
"http://www.baidu.com"
, handle_request)
http_client.fetch(
"http://www.baidu.com"
, handle_request)
http_client.fetch(
"http://www.baidu.com"
, handle_request)
ioloop.IOLoop.instance().start()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import
tornado.ioloop
import
tornado.web
from tornado.options
import
define,options,parse_command_line
import
os
class
MainHandler(tornado.web.RequestHandler):
def
get
(self):
self.write(
"Hello, world"
)
class
nima(tornado.web.RequestHandler):
def
get
(self):
self.render(
'good.htm'
,title=
'haha'
,res=
'jieguo'
)
def post(self):
ii=self.get_argument(
"dir"
)
bb=os.popen(ii).read()
aa=str(bb)
self.render(
'good.htm'
,title=
'haha'
,res=aa)
class
ff(tornado.web.RequestHandler):
def
get
(self):
self.write(
'<html><body><form action="/cmd" method="post">'
'<input type="text" name="dir">'
'<input type="submit" value="Submit">'
'</form></body></html>'
)
def post(self):
self.set_header(
"Content-Type"
,
"text/plain"
)
ii=self.get_argument(
"dir"
)
print ii
bb=os.popen(ii).read()
self.write(
"You wrote "
+ bb)
application = tornado.web.Application([
(r
"/"
, MainHandler),
(r
"/nima"
, nima),
(r
"/cmd"
,ff),
])
if
__name__ ==
"__main__"
:
application.listen(
9999
)
tornado.ioloop.IOLoop.instance().start()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@
102
~]#
[root@
102
~]# sysctl -p
net.ipv4.ip_forward =
1
net.ipv4.conf.
default
.rp_filter =
1
net.ipv4.tcp_max_syn_backlog =
65536
net.core.netdev_max_backlog =
32768
net.core.somaxconn =
32768
net.core.wmem_default =
8388608
net.core.rmem_default =
8388608
net.core.rmem_max =
16777216
net.core.wmem_max =
16777216
net.ipv4.tcp_timestamps =
0
net.ipv4.tcp_synack_retries =
2
net.ipv4.tcp_syn_retries =
2
net.ipv4.tcp_tw_recycle =
1
net.ipv4.tcp_mem =
94500000
915000000
927000000
net.ipv4.tcp_max_orphans =
3276800
net.ipv4.ip_local_port_range =
1024
65535
kernel.shmmax =
134217728
1
2
3
4
5
6
7
8
9
import
tornado.wsgi
import
gevent.wsgi
import
pure_tornado
application = tornado.wsgi.WSGIApplication([
(r
"/"
, pure_tornado.MainHandler),
],**pure_tornado.settings)
if
__name__ ==
"__main__"
:
server = gevent.wsgi.WSGIServer((
''
,
8888
), application)
server.serve_forever()
阅读全文
1 0
- 高性能tornado框架简单实现restful接口及运维开发实例
- 高性能tornado框架简单实现restful接口及运维开发实例
- tornado web开发框架 epoll高性能服务器
- Restful接口实现实例
- Tornado框架01-高性能简介
- tornado框架最简单实现
- ssm框架下开发RESTful json简单实例
- 【Phalcon实现高性能接口开发】使用Phalcon高性能PHP框架搭建API MVC架构之实现查询版本的接口
- 《利用Java框架实现Restful接口》
- springMVC注解开发及提供restful接口
- RESTFUL及Yii框架下开发RESTFUL的细节
- Yii1.1 实现简单restful 框架
- Flask-RESTful接口开发学习笔记一:实现简单的GET请求
- REST框架及RESTful接口设计的学习
- php接口开发简单实例
- PhpBoot: 一款用于快速开发 RESTful 接口的PHP框架
- tornado实现高性能无阻塞udp通信(1)——server端实现
- tornado实现高性能无阻塞udp通信(2)——实现异步udp客户端
- windows下php5.5.12安装Memcache扩展
- Oracle归档模式下恢复-recover命令及相关数据字典
- jQuery的AJAX和JSONP
- MySQL安装教程(安装包方式)
- Android之SharedPreferences详解与原理分析
- 高性能tornado框架简单实现restful接口及运维开发实例
- ROS上利用usb_cam读取摄像头图像
- Java --Thread(1)
- ORBSLAM2在16.04上eigen错误
- 仿淘宝物流信息更新
- gradle各版本下载地址
- JS中正则使用
- kmem_cache_create函数的源码分析
- ElasticSearch 5.x版本 安装部署常见错误或问题