我是 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请求?
答案 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,如果浏览器支持,则回退到长轮询。