检查Twisted是否支持各种操作通常是一个好主意,因为它可以与 Tornado 使用tornado.platform.twisted
. 对于 XML-RPC,有以下代码:http://twistedmatrix.com/documents/13.0.0/web/howto/xmlrpc.html一个简单的例子:
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.platform.twisted
tornado.platform.twisted.install()
from twisted.web.xmlrpc import Proxy
from twisted.internet import reactor
proxy = Proxy('http://advogato.org/XMLRPC')
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)
class IndexHandler(tornado.web.RequestHandler):
def printValue(self, value):
self.write(repr(value))
self.finish()
def printError(self, error):
self.write('error: %s' % error)
self.finish()
@tornado.web.asynchronous
def get(self):
proxy.callRemote('test.sumprod', 3, 5).addCallbacks(self.printValue, self.printError)
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
基准测试:
$ ab -n 1000 -c 5 http://localhost:8000/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: TornadoServer/3.0.1
Server Hostname: localhost
Server Port: 8000
Document Path: /
Document Length: 7 bytes
Concurrency Level: 5
Time taken for tests: 76.529 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 201000 bytes
HTML transferred: 7000 bytes
Requests per second: 13.07 [#/sec] (mean)
Time per request: 382.646 [ms] (mean)
Time per request: 76.529 [ms] (mean, across all concurrent requests)
Transfer rate: 2.56 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 302 382 498.9 308 5318
Waiting: 302 382 498.9 308 5318
Total: 302 382 498.9 308 5318
Percentage of the requests served within a certain time (ms)
50% 308
66% 310
75% 311
80% 313
90% 320
95% 334
98% 1310
99% 3309
100% 5318 (longest request)
直接xmlrpclib
用于比较:
import tornado.httpserver
import tornado.ioloop
import tornado.web
import xmlrpclib
server = xmlrpclib.ServerProxy('http://advogato.org/XMLRPC')
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.write(repr(server.test.sumprod(3, 5)))
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
基准测试:
$ ab -n 1000 -c 5 http://localhost:8000/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: TornadoServer/3.0.1
Server Hostname: localhost
Server Port: 8000
Document Path: /
Document Length: 7 bytes
Concurrency Level: 5
Time taken for tests: 325.538 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 201000 bytes
HTML transferred: 7000 bytes
Requests per second: 3.07 [#/sec] (mean)
Time per request: 1627.690 [ms] (mean)
Time per request: 325.538 [ms] (mean, across all concurrent requests)
Transfer rate: 0.60 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 305 1625 484.5 1532 4537
Waiting: 305 1624 484.5 1532 4537
Total: 305 1625 484.5 1532 4537
Percentage of the requests served within a certain time (ms)
50% 1532
66% 1535
75% 1537
80% 1539
90% 1547
95% 1984
98% 4524
99% 4533
100% 4537 (longest request)
更糟糕。