TCP聊天服务器套接字v1.3
| 1.抗压结果所有版本记录:
v1.0
: TCP聊天服务器套接字|PyQt5+socket(TCP端口映射+端口放行)+logging+Thread(含日志,html)+anaconda打包32位exe(3.4万字)|python高阶
v1.1
: python TCP套接字服务器v1.1-新增服务端命令功能及修改bug(socket+PyQt5)
v1.2
: python TCP服务器v1.2 - 服务端新增用户登录注册(json, md5加密)
昨天,我编写了一个连续攻击的程序,以我的电脑, 抗压结果如下(单位: 线程):
一直共同发送32kb 乱码服务器 | 客户端(PyQt5) |
---|---|
26 | 26 |
优化完后:
服务端 | 客户端(PyQt5) |
---|---|
167 | 27 |
不要问我一共坚持了多少分钟,因为我攻击的程序在释放内存的情况下也已经崩溃了…
发送完随机符号规范的密码后关闭套接字服务器 | 客户端(PyQt5) |
---|---|
517 | 517 |
优化完后:
服务端 | 客户端(PyQt5) |
---|---|
1000+ | ~ |
很显然, 服务器删除关闭套接字也是必不可少的.
class Server(object):
def __init__(..., clear_time=20):
...
self.clear_time = clear_time
def clear_socket(self):
while True:
del_list = list(filter(lambda c: hasattr(c, 'Quitted') or (not c.isOpen()), self.connect))
for user in del_list:
self.connect.remove(user)
if del_list:
logger.info(f"Clear the closed client socket, number is {len(del_list)}.")
else:
logger.info('None of the sockets have been cleaned.')
time.sleep(self.clear_time)
def run(self):
...
logger.info(f'Clear the closed socket once every {self.clear_time} second(s).')
threading(True, target = self.clear_socket)
...
class Client(object):
def quit(self) -> None:
if hasattr(self, 'Quitted'):
return
else:
self.Quitted = True
if self.isOpen() is True:
self.socket.close()
self.server.quit(self.username,self.addr)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)