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()
|