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.blind(localAddr)# 绑定端口号
  serversocket.listen(5)# 设置最大连接数,超过后排队
  serversocket.setblocking(0)#将套接字设置为非堵塞
  while True:
    
try:
      
newClient=server_socket.accept()

    except Exception as result:#如果没有客户端连接则产生一个异常
      pass
    else:#如果有客户端连接,则将新的客户端设置为非阻塞,并添加到客户端列表中
      newClient_socket.setblocking(0)
      
Client_sockets.append(newClient)
    
Clients_invalid=[]#创建无效的客户端列表
    for clientSocket,clientAddr in
Clients:
      try:
        recvData=clientSocket.recv(1024)
        if len(recvData)>0:
          print(str(clientAddr)+recvData))#处理数据
        else:
          clientSocket.close()#客户端已关闭
          
Clients_invalid.append((clientSocket,clientAddr)
)#将客户端计入无效列表
       except Exception as result:#接收异常则忽略
        pass
    for client in Clinets_invalid :#从客户端列表中移除无效的客户端
      Clients.remove(client)
if name=__'main'__:
  main()

猜你喜欢

转载自www.cnblogs.com/sunsuoli/p/12899697.html
今日推荐