1.socket编程
软件测试并jmeter为的是实现客户端并发,jmeter 的原理是使用线程池,
而软件开发的目的是为实现服务端的并发支持多用户同时并发工作
2. 基于多线程实现套接字服务端实现并发
客户端:
‘‘‘客户端只要单用户循环通信‘‘‘import socketclient = socket.socket()client.connect((‘127.0.0.1‘,8090))while True: client.send(‘33‘.encode(‘utf-8‘)) data = client.recv(1024) print(data)
‘‘‘服务端要实现多用户连接 并实现循环通信‘‘‘方式1: 线程池import socketfrom concurrent.futures import ThreadPoolExecutor server = socket.socket() server.bind( (‘127.0.0.1‘, 9000)) server.listen(5) # 1.封装成一个函数 多用户实现循环通信 一个用户创建一个通道def run(conn): while True: try: data = conn.recv(1024) if len(data) == 0: break print(data.decode(‘utf-8‘)) conn.send(‘111‘.encode(‘utf-8‘)) except Exception as e: break conn.close() if __name__ == ‘__main__‘: print(‘Server is run....‘) pool = ThreadPoolExecutor(50) while True: conn, addr = server.accept() print(addr) pool.submit(run, conn)
方式2: 直接循环不设置并发数
def communicate(conn): # 一个用户一个通道 while True: try: data = conn.recv(1024) if len(data) == 0: break conn.send(data.upper()) except Exception as e: print(e) break conn.close() def server(): server = socket.socket() server.bind((‘127.0.0.1‘,8989)) server.listen(5) while True: conn,addr = server.accept() t = Thread(target= communicate,args=(conn,) ) # 因为python中的() 既可以表示数学公式中的小括号,又可以表示元组 t.start() # 执行communicate函数 server函数为一个线程,start()会令启一个线程 if __name__ == ‘__main__‘: s = Thread(target = server) s.start()
原文地址:https://www.cnblogs.com/bigbox/p/12040209.html
时间: 2024-08-30 05:15:29