socketserver

简介

SocketServer是python的一个网络服务器框架,可以减少开发人员编写网络服务器程序的工作量。

SocketServer总共有4个server基类。

TCPServer:负责处理TCP协议。

UDPServer:负责处理UDP协议。

UnixStreamServer:只适用于类unix平台,不常用。

UnixDatagramServer:只适用于类unix平台,不常用。

这4个类会同步处理每一个request,也就是说只有当前的request处理完才会处理下一个request,这种方式显然很不合理,如果当前的request处理过慢的话就会导致“堵塞”。正确的处理方式应该是开辟新的进程或线程去处理不同的request,通过混合继承ForkingMixIn或ThreadingMixIn类即可解决此问题。

创建socketserver

  1. First, you must create a request handler class by subclassing the BaseRequestHandlerclass and overriding its handle() method; this method will process incoming requests.
  2. Second, you must instantiate one of the server classes, passing it the server’s address and the request handler class.
  3. Then call the handle_request() or serve_forever() method of the server object to process one or many requests.
  4. Finally, call server_close() to close the socket.
import socketserver

class MyTCPHandle( socketserver.BaseRequestHandler ):  #创建一个继承自 SocketServer.BaseRequestHandler 的类,并重构handle方法
    def handle(self):
        while True:
            try:
                self.data = self.request.recv(1024).decode()
                self.request.send(self.data.upper().encode())
            except ConnectionResetError as e:
                print("ConnectResetError:", e)
                break
            finally:
                print("ok")

if __name__ == '__main__':
    #server = socketserver.TCPServer(('localhost', 6969), MyTCPHandle)        #单线程
    server = socketserver.ThreadingTCPServer(('localhost', 6969), MyTCPHandle)  #多线程
    #server = socketserver.ForkingTCPServer(('localhost', 6969), MyTCPHandle)    #多进程,windows不可用
    server.serve_forever()

socketserver使用异常处理客户端断开的情况
ftp的高级版本:https://github.com/jinboxu/ftp_advanced

你可能感兴趣的:(socketserver)