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方法

posted @ 2020-05-07 21:36  the3times  阅读(119)  评论(0编辑  收藏  举报