基于python socketserver框架全面解析
发布时间 - 2026-01-11 03:20:58 点击率:次socketserver框架是一个基本的socket服务器端框架, 使用了threading来处理多个客户端的连接, 使用seletor模块来处理高并发访问, 是值得一看的python 标准库的源码之一

对于select网络框架的理解可以看 << 基于python select.select模块通信的实例讲解 >>。socketserver框架采用了selector框架来供你选择相适应的网络通信框架, 比如select, poll, epoll等。有了这些网络框架我们就能处理高并发的网络访问了.
先看看示例代码吧:
# coding: utf-8
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
"""
The request handler class for our server.
It is instantiated once per connection to the server, and must
override the handle() method to implement communication to the
client.
"""
def handle(self):
# self.request is the TCP socket connected to the client
self.data = self.request.recv(1024).strip()
print("{} wrote:".format(self.client_address[0]))
print(self.data)
# just send back the same data, but upper-cased
self.request.sendall(self.data.upper())
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
# Create the server, binding to localhost on port 9999
# 如果子类没有某个方法或是属性, 就回去父类中调用
with socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler) as server:
# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
server.serve_forever()
客户端:
# coding: utf-8
import socket
sk = socket.socket()
sk.connect(("127.0.0.1", 9999)) # 主动初始化与服务器端的连接
while True:
send_data = input("输入发送内容:")
sk.sendall(bytes(send_data, encoding="utf8"))
if send_data == "byebye":
break
accept_data = str(sk.recv(1024), encoding="utf8")
print("".join(("接收内容:", accept_data)))
sk.close()
我们创建一个继承自BaseRequestHandler类的TCP请求处理类, 说白了这个类就是我们自己封装的基于socket的recv()函数与send()函数的类, 而所谓的TCP请求处理类其实就是对socket服务器端的bind, listen, accept等处理的封装类, 而且这个封装的并不是简单的socket, 而是基于select或是epoll等网络框架的类, 我们调用这个类就能轻易地处理高并发的网络访问. 其实认真阅读源码, 你会发现整体的程序设计是基于事件驱动的, 事件驱动机制的三个要素: 消息(事件)队列, 消息(事件)触发, 事件循环。只不过socketserver框架的事件驱动机制就做到了socket的accept()方法那, 接下来的消息接受(recv)与发送(send)就没有在做封装成相应的事件来进行处理了。
在这里说一个要注意的地方, 我使用了ThreadingTCPServer()类响应多个客户端的连接, 但是当我阅读这个类的源码的时候, 表示很疑惑啊!
class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass
这让我很疑惑啊,再看看调用:
with socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler) as server: # Activate the server; this will keep running until you # interrupt the program with Ctrl-C server.serve_forever()
这更疑惑, ThreadingTCPServer哪来的构造函数, 后来研究了一下, 原来当子类的某个函数或是属性发生调用时, 如果不是重载了父类的方法或是属性, 而且子类中没有这个方法或是属性, 就会去调用父类相对应的方法或是属性, 于是上面的就是调用了TCPServer的初始化函数__init__以及serve_forever(), 随后调用的是子类的Request_handler函数
程序结果:
以上这篇基于python socketserver框架全面解析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# python
# socketserver框架
# Python使用socketServer包搭建简易服务器过程详解
# python网络编程:socketserver的基本使用方法实例分析
# Python探索之SocketServer详解
# 利用Python中SocketServer 实现客户端与服务器间非阻塞通信
# Python使用SocketServer模块编写基本服务器程序的教程
# 实例讲解Python中SocketServer模块处理网络请求的用法
# python网络编程之TCP通信实例和socketserver框架使用例子
# Python网络编程之socket与socketserver
# 子类
# 就能
# 多个
# 客户端
# 给大家
# 类中
# 的是
# 是一个
# 使用了
# 在这
# 当我
# 我很
# 要注意
# 希望能
# 采用了
# 如果不是
# 这篇
# 会去
# 说白了
# 这让
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
bing浏览器学术搜索入口_bing学术文献检索地址
Linux系统命令中tree命令详解
个人摄影网站制作流程,摄影爱好者都去什么网站?
简单实现Android验证码
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
怎么用AI帮你设计一套个性化的手机App图标?
利用vue写todolist单页应用
Angular 表单中正确绑定输入值以确保提交与验证正常工作
高防服务器:AI智能防御DDoS攻击与数据安全保障
C语言设计一个闪闪的圣诞树
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
如何获取免费开源的自助建站系统源码?
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
Laravel如何自定义分页视图?(Pagination示例)
敲碗10年!Mac系列传将迎来「触控与联网」双革新
微信小程序 scroll-view组件实现列表页实例代码
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
简历在线制作网站免费版,如何创建个人简历?
如何在万网自助建站平台快速创建网站?
lovemo网页版地址 lovemo官网手机登录
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
魔方云NAT建站如何实现端口转发?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
5种Android数据存储方式汇总
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
如何确认建站备案号应放置的具体位置?
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
如何在阿里云虚拟服务器快速搭建网站?
如何在IIS服务器上快速部署高效网站?
PHP 500报错的快速解决方法
如何在腾讯云服务器快速搭建个人网站?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
Python函数文档自动校验_规范解析【教程】
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
香港服务器部署网站为何提示未备案?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
如何在自有机房高效搭建专业网站?
香港网站服务器数量如何影响SEO优化效果?
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
Laravel如何配置和使用缓存?(Redis代码示例)
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?

