socketserver模块-服务端并发功能-源码流程解析
sockserver服务端并发
-
socketserver
模块是python
内置模块。 -
socketserver
封装了socket
服务端,帮我们简化了服务端的创建流程,并且支持并发功能。 -
通过
socketserver
可以快速创建基于TCP
协议和或者UDP
协议的服务端。 -
创建并实现服务端并发效果,仅仅需要三步。
import socketserver
# 第一步:制作通信循环
class MyTcpHandler(socketserver.BaseRequestHandler):
def handle(self): # 通信循环
while 1:
try:
data = self.request.recv(1024)
if not data: break
self.request.send(data.upper())
except Exception as e:
print(e)
break
self.request.close()
if __name__ == '__main__':
ip_port = '127.0.0.1', 8888
# 第二步:实例化socket服务端对象
server = socketserver.ThreadingTCPServer(ip_port, MyTcpHandler)
# 第三步:开启连接循环
server.serve_forever()
socketserver源码解析
之所以三步就可以创建并实现服务端的并发效果,是因为底层帮我们封装大量代码。
程序从上往下执行,
第一步,遇到类MyTcpHandler
的定义,什么也不执行。
第二步,遇到 server = socketserver.ThreadingTCPServer(ip_port, MyTcpHandler)
,即实例化对象。
第三步: server.serve_forever()
<1> 通过server_forever
方法,一次调用父类的一系列方法;最后调用finish_request
方法。
<2> 在 finish_request
方法内实例化我们转入的MyTcpHandler
<3> 又MyTcpHandler
没有__init__
,故调用父类socketserver.BaseRequestHandler
的__init__
<4> 巧的是socketserver.BaseRequestHandler
的__init__
内调用handle
方法,即我们重写的handle
方法