在Tornado中计算每秒请求数

5 投票
4 回答
3499 浏览
提问于 2025-04-17 11:00

我刚接触PythonTornado 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秒钟

撰写回答