Подсчет количества запросов в секунду в Торнадо - PullRequest
5 голосов
/ 25 января 2012

Я новичок в Python и Tornado WebServer.Я пытаюсь выяснить количество запросов и количество запросов в секунду в моем коде на стороне сервера.Я использую Tornadio2 для реализации веб-сокетов.

Пожалуйста, взгляните на следующий код и дайте мне знать, какие изменения могут быть внесены в него.Я использую 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 ]

2 голосов
/ 11 апреля 2012

Я использую Siege - отличный инструмент для тестирования запросов, если вы работаете в Linux.Пример

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

-c10 = 10 одновременных пользователей -t10s = 10 секунд

1 голос
/ 01 февраля 2012

Tornadio2 имеет встроенный статистический модуль, который включает в себя входящие соединения / с и другие счетчики.

Проверьте следующий пример: https://github.com/MrJoes/tornadio2/tree/master/examples/stats

0 голосов
/ 27 января 2012

Обычные HTTP-запросы в Tornado создают новый экземпляр RequestHandler, который сохраняется до тех пор, пока не будет разорвано соединение.

WebSockets использует постоянные соединения.Создается один экземпляр WebSocketHandler, и каждое сообщение, отправляемое браузером на сервер, вызывает метод on_message.

Насколько я понимаю, Socket.IO/Tornad.IO будет использовать WebSockets, если поддерживаетсябраузер, возвращаясь к долгому опросу.

0 голосов
/ 25 января 2012

При тестировании приложений всегда подходите к тестированию производительности со здоровой оценкой принципа неопределенности . .

Если вы хотите протестировать сервер, подключите два компьютера к концентратору, где вы можете отслеживать трафик от одного к другому. Тогда блин из сервера. Для этого есть множество инструментов, просто ищите веб-нагрузочное тестирование инструменты.

...