高并发网络编程的性能测试一直是个非常难的问题
困难点:
1 纯网络性能测试会把业务逻辑最小化,需要一定的改造。
2测试虚要给服务器足够的压力,这样对于测试用的客户端的QPS就有较高的要求
解决方案,
1 将业务逻辑跟网络框架拆分
2 我们可以开启多个实例
我们用来测试的代码库就是
https://www.cnblogs.com/nerdlerss/p/9035928.html
中的库,在这个库中,我们把业务逻辑跟网络框架进行了拆分
我们的业务代码就是
counter = 0 if __name__ == '__main__': def logic(d_in): global counter counter += 1 if counter %100000 ==0: print counter,time.time() return(d_in[::-1]) reverseD = nbNet('0.0.0.0', 9099, logic) reverseD.run()
说白了就是 每响应10w下答应一下时间
我们测试端代码
#!/usr/bin/env python import socket, sys, os HOST = '127.0.0.1' PORT = 9099 CNT = int(sys.argv[2]) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) cmd = sys.argv[1] data = "%010d%s"%(len(cmd), cmd) while True: s.send(data * CNT) s.recv(len(data) * CNT)
但是我们的客户端是不可能打到server端的性能瓶颈的,我们可以开启多个终端,启动多个实例,这样达到我们性能要求
在python内建了一个 profiler工具,可以帮我们定位性能瓶颈