python TCP服务器v1.3 - 服务器抗压测试及关闭套接字处理

python TCP服务器v1.3 - 服务器抗压测试及关闭套接字处理,第1张

TCP聊天服务器套接字v1.3

所有版本记录:
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加密)

| 1.抗压结果

昨天,我编写了一个连续攻击的程序,以我的电脑, 抗压结果如下(单位: 线程):

一直共同发送32kb 乱码
服务器客户端(PyQt5)
2626

优化完后:

服务端客户端(PyQt5)
16727

不要问我一共坚持了多少分钟,因为我攻击的程序在释放内存的情况下也已经崩溃了…

发送完随机符号规范的密码后关闭套接字
服务器客户端(PyQt5)
517517

优化完后:

服务端客户端(PyQt5)
1000+~

很显然, 服务器删除关闭套接字也是必不可少的.

| 2.优化代码
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)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/568335.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存