單線程併發的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 客戶端
      多個客戶端同時啓動鏈接服務進行測試
相關文章
相關標籤/搜索