【问题标题】:Counting the number of requests per second in Tornado在 Tornado 中计算每秒的请求数
【发布时间】:2012-01-24 21:50:00
【问题描述】:

我是 PythonTornado 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 请求?

【问题讨论】:

    标签: python tornado


    【解决方案1】:

    我使用Siege - 如果您在 linux 上运行,它是测试请求的绝佳工具。示例

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        在测试应用程序时,始终以对uncertainty principle. 的良好评价来进行性能测试。

        如果您想测试服务器,请将两台 PC 连接到集线器,您可以在集线器上监控从一台到另一台的流量。然后把服务器轰出去。有多种工具可以做到这一点,只需寻找网络负载测试工具。

        【讨论】:

          【解决方案4】:

          Tornado 中的普通 HTTP 请求会创建一个新的 RequestHandler 实例,该实例会一直持续到连接终止。

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

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

          【讨论】:

            猜你喜欢
            • 2016-10-04
            • 1970-01-01
            • 1970-01-01
            • 2016-08-24
            • 2020-03-23
            • 1970-01-01
            • 1970-01-01
            • 2012-06-23
            • 1970-01-01
            相关资源
            最近更新 更多