gpt4 book ai didi

python - 如何在 Tornado ( Python ) 服务器中测试 Max Open Websocket Limit

转载 作者:行者123 更新时间:2023-11-28 19:20:54 25 4
gpt4 key购买 nike

我正在尝试获取到 websockets 服务器的最大打开连接数。我有简单的 Python 代码。这给了我 28K 打开连接,但我认为服务器或客户端代码可能有问题。

服务器.py

#!/usr/bin/env python

import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web

class WSHandler(tornado.websocket.WebSocketHandler):
clients = []

def open(self):
self.clients.append(self)
print 'new connection'
self.write_message("Hello World")

def on_message(self, message):
print 'message received %s' % message

def on_close(self):
#self.clients.remove(self)
pass
#print 'closed connection'

application = tornado.web.Application([
(r'/ws', WSHandler),
])


if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application,no_keep_alive=False)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()

客户端

#!/usr/bin/env python

"""
Connect websockets in concurrency,
each connection should be open until last connection made and
server did not response
"""

import sys
import gevent
from gevent import monkey
from websocket import create_connection



#------------
# Functions
#------------
def send_hello(n):
my_count = 0
while True:
ws = create_connection(ws_link)
ws.send("Hello World")
recv = ws.recv()
if recv:
print "-----------------------"
print "I'm Connection : %r" % n
print "Sending 'Hello World'"
print "Received : %s" % recv
my_count = my_count + 1
#ws.close() # Do not close the connections,
# Let's see how much server can handle..
print "I've sent %r messeges to server" % my_count
print "-----------------------"


if __name__ == '__main__':
if len(sys.argv) != 3:
print "\nUsage:\n\t %r <ws_link> <number_of_connection>\n" % sys.argv[0]
sys.exit(1)
ws_link, number_of_connections = sys.argv[1:]
# patches stdlib to cooperate with other greenlets
#monkey.patch_thread()
try:
monkey.patch_all()
jobs = [ gevent.spawn(send_hello,i) for i in range(int(number_of_connections)) ]
gevent.wait(jobs)
except Exception as e:
print "Error : %r" % e
sys.exit(1)

最佳答案

一个问题是您需要一个全局客户列表。您的服务器代码当前为每个客户端都有一个客户端列表,其中只包含它自己。

所以:

#!/usr/bin/env python

import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web
clients = []

class WSHandler(tornado.websocket.WebSocketHandler):


def open(self):
clients.append(self)
print 'new connection'
self.write_message("Hello World")

def on_message(self, message):
print 'message received %s' % message

def on_close(self):

clients.remove(self)
pass
#print 'closed connection'

application = tornado.web.Application([
(r'/ws', WSHandler),
])


if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application,no_keep_alive=False)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()

关于python - 如何在 Tornado ( Python ) 服务器中测试 Max Open Websocket Limit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25307457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com