单线程并发的server端

本文深入探讨了非阻塞I/O模型在服务器端的应用,通过设置sk.setblocking(False)实现服务器accept和recv的非阻塞操作。文章详细介绍了如何处理连接请求和接收数据,包括连接管理和错误处理,为理解非阻塞I/O提供了实践指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

非阻塞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 客户端
      多个客户端同时启动连接服务进行测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值