Python之单线程-非阻塞模式实现TCP服务器连接多客户端

通过为每个客户端创建一个进程的方式,能够同时与多个客户端进行通讯,但是如果有成百上千个客户端,仍然为每个客户端创建进程的话,需要消耗较多的资源,因此需要创建用单线程实现与多个客户端连接的服务器。

# 导入 socket、sys 模块

import socket
import sys

Clients=[]#创建客户端socket列表

def main():
  # 创建 socket 对象
  server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  localAddr=('',8080)
  server_socket.bind(localAddr)# 绑定端口号
  server_socket.listen(5)# 设置最大连接数,超过后排队
  server_socket.setblocking(0)#将套接字设置为非堵塞  
  while True:
    try:
      
newClient=server_socket.accept()

    except Exception as result:#如果没有客户端连接则产生一个异常
      pass
    else:#如果有客户端连接,则将新的客户端设置为非阻塞,并添加到客户端列表中
      newClient[0].setblocking(0)
      
Clients.append(newClient)
    
Clients_
invalid=[]#创建无效的客户端列表
    
for clientSocket,clientAddr in Clients:
      try:
        meg='0'
        
clientSocket.send(msg.encode('utf-8')#通过发送数据判断客户端是否在线
       except:#客户端不在线
         clientSocket.close()#关闭连接
         Clients_invalid.append((clientSocket,clientAddr))#将客户端计入无效列表
       else:
        try:          
          recvData=clientSocket.recv(1024)
          if len(recvData)>0:
         
   print(recvData))#处理数据
          else:
            pass
          

        except :#接收异常则忽略
          pass
    for client in Clinets_invalid :#从客户端列表中移除无效的客户端
      Clients.remove(client)
if __name__='__main__':
  main()
原文地址:https://www.cnblogs.com/sunsuoli/p/12899697.html