单线程并发的server端

非阻塞I/O模型

  • 主要是服务器的启动

  • sk.setblocking(False)设置这个,当服务器没有连接或者接收不到消息时报BlockingIOError 错误

      #server端
      import socket
      
      sk = socket.socket()
      sk.bind(('127.0.0.1', 8080))
      sk.listen()
      
      sk.setblocking(False)	#设置服务器的accept, recv均为非阻塞
      
      conn_l = []	#连接上的conn都会加入这个列表中
      del_l = []	#断开的conn都会加入到这个列表中
      while 1:
          try:
              conn, addr = sk.accept()	
              conn_l.append(conn)
      
          except BlockingIOError:
              try:
                  for conn in conn_l:
                      ret = conn.recv(1024)
                      if ret == b'':
                          del_l.append(conn)
                          continue
                      else:
                          print(ret)
                  
              except BlockingIOError:
                  pass
      
              for conn in del_l:
              		conn.close()
                  conn_l.remove(conn)
              del_l.clear()
      ——————————————————————————————————
      #client 客户端
      多个客户端同时启动连接服务进行测试
原文地址:https://www.cnblogs.com/liliudong/p/9746286.html