Socketserver模块可以简化网络服务器的编写,它包含了四种服务器类,TCPServer使用TCP协议,UDPServer使用UDP协议,还有两个不常使用的,即UnixStreamServer和UnixDatagramServer,这两个类仅仅在unix环境下有用。
使用服务器编程,需要进行一下步骤,先建立一个请求句柄类,这个类继承自BaseRequestHandler类,建立这个类后重写它的handle方法,然后实例化服务器类,把主机名,端口号和句柄类传给它,然后调用server_forever()方法来处理请求。
使用socketserver框架的服务器:
import SocketServer
host=''
port=10000
class Handler(SocketServer.StreamRequestHandler):
def handler(self): ##重写它的handle方法
addr=self.request.getpeername()
print "got connection from",addr
self.wfile.write("connected")
server=SocketServer.TCPServer((host,port),Handler) ## handler方法
server.serve_forever()
上面的socketserver服务器只能处理一个请求,如果要处理多个请求,可以用forking或者threading实现,实现多进程或者多线程服务器。下面是使用forking和threading的服务器代码:
使用forking的服务器:
from SocketServer import TCPServer,ForkingMixIn,StreamRequestHandler
class Server(ForkingMixIn,TCPServer):pass
class Handler(StreamRequestHandler):
def handle(self):
addr=self.request.getpeername()
print "got connection from",addr
self.wfile.write('connected')
server=Server((''.10000),Handler)
server.serve_forever()
使用多线程的服务器:
from SocketServer import TCPServer,ThreadingMixIn,StreamRequestHandler
class Server(ThreadingMixIn,TCPServer):pass
class Handler(StreamRequestHandler):
def handle(self):
addr=self.request.getpeername()
print "got connection from",addr
self.wfile.write("connected")
server=Server(('',10000),Handler)
server.serve_forever()