Python学习之实现高并发socket server
客户端 #!/usr/bin/env python #-*-coding:utf8-*- import socket HOST = 'localhost' # The remote host PORT = 8001 # The same port as used by the server s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) while True: msg = bytes(input(">>:"), encoding="utf8") s.sendall(msg) data = s.recv(1024) # print(data) print('Received', repr(data)) #repr格式化输出 s.close()
服务器 #!/usr/bin/env python #-*-coding:utf8-*- import sys import socket import time import gevent from gevent import socket, monkey monkey.patch_all() def server(port): s = socket.socket() s.bind(('0.0.0.0', port)) s.listen(500) while True: cli, addr = s.accept() #socket sever到这步默认会生成一个线程,把请求交给线程处理 # 但这里是交给协程处理(cli就是客户端连过来而在服务器端为其生成的一个连接实例)
gevent.spawn(handle_request, cli) #启动一个协程 #把客户端请求连接生成的实例cli交给handle_request方法 def handle_request(conn): #负责处理和客户端请求的所有交互 try: while True: data = conn.recv(1024) print("recv:", data) conn.send(data) if not data: conn.shutdown(socket.SHUT_WR) except Exception as ex: print(ex) finally: conn.close() if __name__ == '__main__': server(8001)
(会生成一个线程)