Note:python3中SocketServer模块名字变为socketserver
SocketServer 模块的官方文档:https://docs.python.org/2/library/socketserver.html
总共有4个基本的服务器类:
TCPServer
,UDPServer
,UnixStreamServer
与UnixDatagramServer
.
这4个类中封装了socket
模块中一些方法,可以实现用socket
模块手动完成的所有服务器操作,例如创建套接字、绑定地址和监听进入的连接。
但是这四个类都是同步通信,每一个来自客户的请求,都需要完成后,下一个请求才会开始。在SocketServer
模块中,可以使用mix-in类型的类ForkingMixIn
与ThreadingMixIn
来创建单独的进程或者线程实现异步通信。
Creating a Server
- First,创建一个请求处理程序,说明如何处理客户端请求。这个请求处理类需要继承自
BaseRequestHandler
类。请求处理类中,必须重写handle()
方法,这个方法将说明如何处理客户的请求。 - Second,需要实例化(先创建一个新的类,继承自thread或者forking和服务器类中的一个)4个基本服务器类中的其中一个,向其中传入服务器地址参数与请求处理类参数。
- Then,然后调用服务器对象的
handle_request()
或者serve_forever()
方法来处理一个或者多个请求。 - Finally,调用
server_close()
方法来关闭套接字。
KEY POINT:Forking and threading versions of each type of server can be created using the ForkingMixIn
and ThreadingMixIn
mix-in classes. For instance, a threading UDP server class is created as follows:
class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass
首先要继承的是mix-in类,因为ThreadingMixIn
重写了一个UDPServer里面的方法。