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
# 子类
# 就能
# 多个
# 客户端
# 给大家
# 类中
# 的是
# 是一个
# 使用了
# 在这
# 当我
# 我很
# 要注意
# 希望能
# 采用了
# 如果不是
# 这篇
# 会去
# 说白了
# 这让
相关文章:
代刷网站制作软件,别人代刷火车票靠谱吗?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
建站DNS解析失败?如何正确配置域名服务器?
济南专业网站制作公司,济南信息工程学校怎么样?
Android自定义控件实现温度旋转按钮效果
建站之星在线版空间:自助建站+智能模板一键生成方案
如何在云主机快速搭建网站站点?
如何彻底卸载建站之星软件?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
如何在万网自助建站平台快速创建网站?
建站之星如何修改网站生成路径?
制作公司内部网站有哪些,内网如何建网站?
Android自定义listview布局实现上拉加载下拉刷新功能
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
黑客如何利用漏洞与弱口令入侵网站服务器?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
建站之星微信建站一键生成小程序+多端营销系统
建站之星如何快速解决建站难题?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
如何高效完成自助建站业务培训?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
建站之星安装需要哪些步骤及注意事项?
建站之星价格显示格式升级,你的预算足够吗?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
如何在西部数码注册域名并快速搭建网站?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
视频网站制作教程,怎么样制作优酷网的小视频?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
盐城做公司网站,江苏电子版退休证办理流程?
如何在云主机上快速搭建多站点网站?
建站之星图片链接生成指南:自助建站与智能设计教程
Python如何创建带属性的XML节点
建站主机服务器选购指南:轻量应用与VPS配置解析
Python路径拼接规范_跨平台处理说明【指导】
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
c# 在高并发场景下,委托和接口调用的性能对比
江苏网站制作公司有哪些,江苏书法考级官方网站?
创业网站制作流程,创业网站可靠吗?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
,南京靠谱的征婚网站?
建站之星ASP如何实现CMS高效搭建与安全管理?
如何用VPS主机快速搭建个人网站?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
企业微网站怎么做,公司网站和公众号有什么区别?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
如何高效利用200m空间完成建站?
,在苏州找工作,上哪个网站比较好?
*请认真填写需求信息,我们会在24小时内与您取得联系。