在Linux系统中
01 阻塞服务端
特征:1对1,阻塞。
<div class="cnblogs_code">
server = socket.socket() server.bind((,8000)) server.listen(5) conn,addr = server.accept() ( data = conn.recv(1024 data == b data == b ( (
02 非阻塞服务端
特征:1对多,轮询,非阻塞,占用资源多。
<div class="cnblogs_code">
server = socket.socket() server.setblocking(False) server.bind((,8001)) server.listen(5) all_connection = [] conn,addr = server.accept() conn.setblocking(False) ( handle = all_connection.copy() connection recv_data = connection.recv(1024 : ( all_connection.remove(connection)
03 epoll服务端
特征:1对多,通知机制,非阻塞,占用资源少;epoll:注册惰性事件回调。
<div class="cnblogs_code">
selectors epoll = selectors.EpollSelector() server = socket.socket() server.bind((,8082 server.listen(100 conn,addres = server.accept() data = conn.recv(1024 epoll.unregister(conn) events = epoll.select() key,mask sock = key.fileobj callback = key.data callback(sock)
04客户端
测试服务端。
<div class="cnblogs_code">
client = client.connect((,8082 data = input( recv_data = client.recv(1024 (recv_data.decode())