计算Tornado中每秒的请求数

时间:2012-01-24 21:50:01

标签: python tornado

我是 Python Tornado WebServer的新手。 我试图找出我的服务器端代码中的请求数和请求数/秒。我正在使用Tornadio2来实现websockets。

请查看以下代码并告诉我,可以对其进行哪些修改。 我使用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 :(得分:2)

我使用Siege - 用于测试请求的优秀工具,如果您在Linux上运行。示例

siege http://localhost:8000/?q=yourquery -c10 -t10s 

-c10 = 10个并发用户 -t10s = 10秒

答案 1 :(得分:1)

Tornadio2有内置统计模块,包括传入连接和其他计数器。

请查看以下示例:https://github.com/MrJoes/tornadio2/tree/master/examples/stats

答案 2 :(得分:0)

在测试应用程序时,始终对uncertainty principle.健康的欣赏进行性能测试。

如果要测试服务器,请将两台PC连接到一个HUB,在那里您可以监控从一台到另一台的流量。然后敲出了服务器的地狱。有很多工具可以做到这一点,只需查看 Web负载测试工具。

答案 3 :(得分:0)

Tornado中的正常HTTP请求会创建一个新的RequestHandler实例,该实例会一直存在,直到连接终止。

WebSockets使用持久连接。创建一个WebSocketHandler实例,浏览器向服务器发送的每条消息都会调用on_message方法。

根据我的理解,Socket.IO/Tornad.IO将使用WebSockets,如果浏览器支持,则回退到长轮询。