全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

基于python socketserver框架全面解析

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  # 子类  # 就能  # 多个  # 客户端  # 给大家  # 类中  # 的是  # 是一个  # 使用了  # 在这  # 当我  # 我很  # 要注意  # 希望能  # 采用了  # 如果不是  # 这篇  # 会去  # 说白了  # 这让 


相关文章: 独立制作一个网站多少钱,建立网站需要花多少钱?  如何解决VPS建站LNMP环境配置常见问题?  已有域名和空间如何快速搭建网站?  招贴海报怎么做,什么是海报招贴?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Python如何创建带属性的XML节点  建站之星3.0如何解决常见操作问题?  如何解决ASP生成WAP建站中文乱码问题?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  如何在腾讯云免费申请建站?  如何用美橙互联一键搭建多站合一网站?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  如何快速建站并高效导出源代码?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  如何高效搭建专业期货交易平台网站?  名字制作网站免费,所有小说网站的名字?  建站之星伪静态规则如何设置?  Python lxml的etree和ElementTree有什么区别  制作网站公司那家好,网络公司是做什么的?  如何正确选择百度移动适配建站域名?  C++时间戳转换成日期时间的步骤和示例代码  如何在阿里云香港服务器快速搭建网站?  如何选择可靠的免备案建站服务器?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  如何在Windows虚拟主机上快速搭建网站?  如何彻底卸载建站之星软件?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  香港服务器选型指南:免备案配置与高效建站方案解析  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何快速上传建站程序避免常见错误?  建站之星收费标准详解:套餐费用及年费价格表一览  表情包在线制作网站免费,表情包怎么弄?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  香港服务器租用每月最低只需15元?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  建站之星导航如何优化提升用户体验?  制作网站的模板软件,网站怎么建设?  如何通过虚拟机搭建网站?详细步骤解析  如何选购建站域名与空间?自助平台全解析  如何快速搭建高效香港服务器网站?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  教学网站制作软件,学习*后期制作的网站有哪些?  如何快速搭建二级域名独立网站?  建站之星如何保障用户数据免受黑客入侵?  网站制作需要会哪些技术,建立一个网站要花费多少?  如何快速搭建高效可靠的建站解决方案?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  网站按钮制作软件,如何实现网页中按钮的自动点击? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。