在Tornado中计算每秒请求数
我刚接触Python和Tornado WebServer。
我想弄清楚在我的服务器代码中,如何统计请求的数量以及每秒请求的数量。我正在使用Tornadio2来实现WebSocket。
请看看下面的代码,告诉我可以做哪些修改。
我使用RequestHandler.prepare()来处理所有请求,并用一个列表来存储计数,因为列表是不可变的。
假设所有模块都已包含
count=[0]
class IndexHandler(tornado.web.RequestHandler):
"""Regular HTTP handler to serve the chatroom page"""
def prepare(self):
count[0]=count[0]+1
def get(self):
self.render('index1.html')
class SocketIOHandler(tornado.web.RequestHandler):
def get(self):
self.render('../socket.io.js')
partQue=Queue.Queue()
class ChatConnection(tornadio2.conn.SocketConnection):
participants = set()
def on_open(self, info):
self.send("Welcome from the server.")
self.participants.add(self)
def on_message(self, message):
partQue.put(message)
time.sleep(10)
self.qmes=partQue.get()
for p in self.participants:
p.send(self.qmes+" "+str(count[0]))
partQue.task_done()
def on_close(self):
self.participants.remove(self)
partQue.join()
# Create tornadio server
ChatRouter = tornadio2.router.TornadioRouter(ChatConnection)
# Create socket application
sock_app = tornado.web.Application(
ChatRouter.urls,
flash_policy_port = 843,
flash_policy_file = op.join(ROOT, 'flashpolicy.xml'),
socket_io_port = 8002)
# Create HTTP application
http_app = tornado.web.Application(
[(r"/", IndexHandler), (r"/socket.io.js", SocketIOHandler)])
if __name__ == "__main__":
import logging
logging.getLogger().setLevel(logging.DEBUG)
# Create http server on port 8001
http_server = tornado.httpserver.HTTPServer(http_app)
http_server.listen(8001)
# Create tornadio server on port 8002, but don't start it yet
tornadio2.server.SocketServer(sock_app, auto_start=False)
# Start both servers
tornado.ioloop.IOLoop.instance().start()
另外,我对每个WebSocket消息有些困惑。每个WebSocket事件是以HTTP请求的形式发送到服务器的吗?还是以Socket.IO请求的形式?
4 个回答
0
在测试应用程序时,进行性能测试时一定要理解一个叫做“不确定性原则”的概念。
如果你想测试一个服务器,可以把两台电脑连接到一个集线器(HUB),这样你就可以监控一台电脑发往另一台电脑的网络流量。然后就可以对服务器进行大量的压力测试。有很多工具可以帮助你做到这一点,只需要搜索一下网页负载测试工具就可以了。
1
Tornadio2 自带了一个统计模块,这个模块可以记录每秒钟有多少个连接进来,以及其他一些计数信息。
你可以查看下面这个例子: https://github.com/MrJoes/tornadio2/tree/master/examples/stats
2
我使用的是 Siege,这是一个非常棒的工具,可以用来测试请求,适合在Linux系统上使用。举个例子:
siege http://localhost:8000/?q=yourquery -c10 -t10s
-c10 表示有10个同时在线的用户
-t10s 表示测试持续10秒钟