Python SocketServer实现非阻塞并发通信详解

远山来客
远山来客
发布时间:2026-10-13| 3人浏览过
原创

本文详解如何利用Python的SocketServer模块构建支持高并发的非阻塞网络通信系统。通过组合ThreadingMixIn与StreamRequestHandler,实现多线程处理客户端连接。文章涵盖核心类解析、服务端与客户端代码实现,重点展示基于线程的异步处理机制,适用于需要处理大量并发连接的Python网络应用开发场景。

借助SocketServer模块,可以实现网络客户端与服务器之间的并发连接及非阻塞通信。

在深入具体实现之前,首先需要了解SocketServer模块中提供的可用类:

BaseServer:该类封装了服务器的核心功能,并提供了混合(mix-in)类的挂钩接口。由于它仅用于派生子类,因此不应直接实例化;建议直接使用TCPServer或UDPServer。

TCPServer/UDPServer:提供基础的同步TCP/UDP网络服务器功能。

UnixStreamServer/UnixDatagramServer:提供基于文件系统的同步TCP/UDP服务器功能。

ForkingMixIn/ThreadingMixIn:实现了核心的进程派生或线程化功能。作为混合类,需与服务器类结合使用以提供异步特性,该类本身不直接实例化。

ForkingTCPServer/ForkingUDPServer:由ForkingMixIn与TCPServer/UDPServer组合而成。

BaseRequestHandler:包含处理服务请求的核心逻辑。该类仅用于派生,不直接生成实例;建议使用StreamRequestHandler或DatagramRequestHandler。

StreamRequestHandler/DatagramRequestHandler:专门用于TCP/UDP服务器的服务处理工具。

接下来正式进入主题,我们将采用StreamRequestHandler和ThreadingTCPServer来实现客户端与服务器之间的并发连接及非阻塞Socket通信。

ThreadingTCPServer继承自ThreadingMixIn,主要实现核心的进程合并与线程化功能。

StreamRequestHandler主要用于TCP/UDP服务器的服务处理。

一、创建SocketServer TCP服务端

[python] view plain copy
#创建SocketServerTCP服务器: 
import SocketServer 
from SocketServer import StreamRequestHandler as SRH 
from time import ctime 
host = 'xxx.xxx.xxx.xxx' 
port = 9999 
addr = (host,port) 
class Servers(SRH): 
 def handle(self): 
  print 'got connection from ',self.client_address 
  self.wfile.write('connection %s:%s at %s succeed!' % (host,port,ctime())) 
  while True: 
   data = self.request.recv(1024) 
   if not data: 
    break 
   print data 
   print "RECV from ", self.client_address[0] 
   self.request.send(data) 
print 'server is running....' 
server = SocketServer.ThreadingTCPServer(addr,Servers) 
server.serve_forever() 

二、创建SocketServer TCP客户端

[python] view plain copy
from socket import * 
host = 'xxx.xxx.xxx.xxx' 
port = 9999 
bufsize = 1024 
addr = (host,port) 
client = socket(AF_INET,SOCK_STREAM) 
client.connect(addr) 
while True: 
 data = raw_input() 
 if not data or data=='exit': 
  break 
 client.send('%s\r\n' % data) 
 data = client.recv(bufsize) 
 if not data: 
  break 
 print data.strip() 
client.close() 

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。