32.Python基础篇-socketserver模块

news/2024/12/21 18:11:39/文章来源:https://www.cnblogs.com/mingbo-1/p/18621020

socketserver模块是什么?

是 Python 中一个用于简化基于 socket 的网络服务实现的模块。它提供了一些高层次的类,帮助开发者更容易地实现网络服务。

可以实现并发请求处理

使用socketserver实现的server端,代码演示:

import socketserver  # 导入 socketserver 模块,用于简化基于 socket 的服务器开发# 创建一个自定义的 TCP 服务器类,继承自 socketserver.ThreadingTCPServer
class ReusableTCPServer(socketserver.ThreadingTCPServer):allow_reuse_address = True  # 允许重用地址,这样服务器关闭后可以立即重新启动而不受地址占用问题的影响# 创建一个请求处理类,继承自 socketserver.BaseRequestHandler
class MyServer(socketserver.BaseRequestHandler):def handle(self):# 进入一个循环,保持与客户端的通信while True:# 接收客户端发送的消息,最多接收 1024 字节,并解码为 UTF-8 字符串msg = self.request.recv(1024).decode('utf-8')print(msg)  # 输出客户端发送的消息# 如果客户端发送的是 'bye',则结束通信if msg == 'bye':self.request.send(b'bye')  # 发送 'bye' 回复客户端break  # 退出循环,结束处理# 否则,服务器等待用户输入回应消息server_msg = input(">>>")  # 提示服务器输入消息self.request.send(bytes(server_msg, encoding='utf-8'))  # 将服务器的消息发送给客户端,编码为 UTF-8 字节流# 主程序入口
if __name__ == '__main__':# 创建一个 ReusableTCPServer 实例,绑定到地址 ('127.0.0.1', 8090),并使用 MyServer 作为请求处理类server = ReusableTCPServer(('127.0.0.1', 8090), MyServer)# 启动服务器,开始监听和处理客户端请求server.serve_forever()

上面这个server端代码可以实现与多个客户端同时通信,做到多线程处理消息。

自定义的两个类:

ReusableTCPServer类:

继承自 socketserver.ThreadingTCPServer。主要是为了设置 allow_reuse_address = True,允许服务器在关闭后立即重用端口地址,避免等待操作系统释放端口。

MyServer类:

继承自 socketserver.BaseRequestHandler,用于处理每个客户端的请求。

handle 方法中,服务器不断接收客户端的消息,并根据收到的消息响应。

两个父类的说明

BaseRequestHandler

用于处理每个客户端请求的基类,定义了 handle 方法来进行请求处理。

ThreadingTCPServer

是一个多线程的 TCP 服务器,能够并发处理多个客户端请求,每个连接都会由一个新线程处理,适合 I/O 密集型的应用场景。

总结

通过继承父类ThreadingTCPServer的功能。整体实现了多线程的服务端,能够并发处理多个客户端请求。

通过继承BaseRequestHandler,省去多余的步骤,直接在handler方法中处理消息即可。并且可以自动管理客户端的连接,为每个连接创建一个实例。可以简化代码,提高扩展性与可复用性。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/856435.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UML之类与类图

在所有项目中,类都是最常见的UML模型元素(当然,不可否认,很多项目还没画出类图就直接进入编码实现的阶段了)。类是UML模型与具体实现代码之间的桥梁,随着对UML建模的深入了解,我们也会发现,类(确切说是分析类)其实也是一些模型之间的桥梁。 在真实世界中不同对象通过…

Linux学习笔记(二) vi/vim快速入门

Linux系统会内置vi文本编辑器。 vim具有程序编辑的能力,可以看作是vi的增强版本,可以主动的以字体颜色辨别语法的正确性, 方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。 下面将介绍: 1.vim打开或创建文件的方法。 2.vim的三种工…

Z-BlogPHP 安装步骤

解压程序代码将下载的 Z-BlogPHP 压缩包解压到你的网站根目录,例如 /home/wwwroot/example.com/。访问安装页面打开浏览器,访问你的网站地址,例如 http://example.com/。 会自动跳转到安装页面 http://example.com/zb_install/index.php。填写安装信息在安装页面中输入以下信…

请问如何在 Z-BlogPHP 中开启 Beta 版更新推送?

在 Z-BlogPHP 中开启 Beta 版更新推送可以帮助你及时获取最新的功能和改进,但同时也需要注意 Beta 版可能存在不稳定的情况。以下是开启 Beta 版更新推送的详细步骤:进入后台管理:登录 Z-BlogPHP 后台管理界面,使用你在安装时设置的管理员用户名和密码。访问应用中心:在后…

升级 Z-BlogPHP 到 1.7.3.3260 后为什么会出现后台登录错误?

升级 Z-BlogPHP 到 1.7.3.3260 版本后,后台登录可能会出现错误,主要是由于新版本增加了两个重要的安全保护功能:CSRF(跨站请求伪造)保护和验证码功能。这些功能旨在提高系统的安全性,防止未经授权的访问和自动化攻击。然而,由于某些主题或插件的兼容性问题,这些新增的安…

织梦网站logo图片怎么修改,织梦网站Logo图片修改指南

修改织梦网站的Logo图片可以提升网站的品牌形象。以下是详细的步骤:登录后台管理系统:使用管理员账号登录织梦CMS的后台管理系统。进入模板管理:导航到“模板管理” -> “默认模板管理”。编辑头部模板:找到头部模板文件,通常是header.htm。 点击“编辑”按钮,打开模板…

网站如何修改HTML,轻松掌握HTML文件的编辑技巧

HTML(超文本标记语言)是构建网页的基础。如果您需要修改网站的HTML文件,以下是一些基本步骤和技巧:找到HTML文件:确定您需要修改的HTML文件的位置。通常,HTML文件位于网站根目录或特定的文件夹中。使用文本编辑器:使用文本编辑器(如Notepad++、Sublime Text、VS Code等…

如何修改公司网站的内容,轻松更新网站信息

公司网站的内容更新是维护品牌形象和客户信任的重要环节。以下是一些步骤和技巧,帮助您轻松修改公司网站的内容:确定修改内容:明确需要修改的内容,例如新闻公告、产品介绍、联系方式等。登录后台管理系统:如果您的网站使用CMS(如WordPress、Joomla等),登录后台管理系统…

百度网站标题被修改怎么办,快速恢复百度搜索结果中的网站标题

如果发现百度搜索结果中的网站标题被修改,可以采取以下措施:检查网站元标签:确保网站的HTML代码中包含正确的<title>标签,例如:<title>您的网站标题</title>更新robots.txt:确保robots.txt文件没有阻止搜索引擎抓取网站的关键页面。 提交站点地图:在百…

上传到ftp的网站怎么修改,FTP上传网站文件修改指南

通过FTP上传文件后,你可以直接在服务器上修改网站文件。以下是详细的步骤:连接到FTP服务器:使用FTP客户端(如FileZilla、WinSCP等)连接到你的服务器。输入FTP服务器地址、用户名和密码。导航到网站目录:在FTP客户端中,导航到存放网站文件的目录。通常这个目录名为 publi…

jquery动画表情插件

jquery.mb.emoticons.js是一款jquery动画表情插件。它允许你通过面板拾取某个表情符号,然后可以通过这些表情相应的关键字符号将它们转换为gif动画表情。在线预览 下载使用方法 在页面中引入jquery和jquery.mb.emoticons.js文件。< script src="js/jquery.min.js&q…

软件技术基础第五次作业

.center { width: auto; display: table; margin-left: auto; margin-right: auto }班级链接 24软件技术基础(浙江理工大学)目标 搭建简易的图书管理系统网盘地址 https://pan.baidu.com/s/1lnq1AF1mG5m3BSuj1wa2xw?pwd=ds74码云地址 https://gitee.com/honeyest/library-sy…