能简要说一下Python-SocketServer、BaseServer、TCPServer、BaseHTTPServer、CGIHTTPServer间关系的吗
1个回答
2017-04-07
展开全部
这个关系,先看SocketServer模块,它有5个基本的服务类:BaseServer TCPServer UDPServer UNIXStreamServer UNIXDatagramServer. 处理类有BaseRequestHander StreamRequestHandler
其中BaseServer多用来被继承重写.实际用到的就其他四个类.
其中TCPServer又派生出BaseHTTPServer SimpleHTTPServer CGIHTTPServer SimpleXMLRPCServer DocXMLRPCServer等
应用:服务器收到一个请求(来自客户端的连接)时,就会实例化一个请求处理程序,并且它的各种处理方法会在处理请求时被调用。基本的BaseRequestHander类把所有的操作都放到了处理器的handle()方法中, 这个方法会被服务器调用,然后访问属性self.request中的客户端套接字。如果使用的是流(TCPServer)可以使用StreamRequestHander类来创建两个新属性self.rfile(用于读取)和self.wfile(用于写入),然后使用这些类文件对象和客户机进行通信。
实例:使用SocketServer模块创建一个小型服务器
from SocketServer import TCPServer, StreamRequestHandler
class Handler(StreamRequestHandler):
def handle(self):
addr = self.request.getpeername()
print '获取的连接来自:', addr
self.wfile.write('恭喜你, 连接成功')
server = TCPServer(('', 1234), Handler)
server.serve_forever()
Handler类中的request属性为socket对象
其中BaseServer多用来被继承重写.实际用到的就其他四个类.
其中TCPServer又派生出BaseHTTPServer SimpleHTTPServer CGIHTTPServer SimpleXMLRPCServer DocXMLRPCServer等
应用:服务器收到一个请求(来自客户端的连接)时,就会实例化一个请求处理程序,并且它的各种处理方法会在处理请求时被调用。基本的BaseRequestHander类把所有的操作都放到了处理器的handle()方法中, 这个方法会被服务器调用,然后访问属性self.request中的客户端套接字。如果使用的是流(TCPServer)可以使用StreamRequestHander类来创建两个新属性self.rfile(用于读取)和self.wfile(用于写入),然后使用这些类文件对象和客户机进行通信。
实例:使用SocketServer模块创建一个小型服务器
from SocketServer import TCPServer, StreamRequestHandler
class Handler(StreamRequestHandler):
def handle(self):
addr = self.request.getpeername()
print '获取的连接来自:', addr
self.wfile.write('恭喜你, 连接成功')
server = TCPServer(('', 1234), Handler)
server.serve_forever()
Handler类中的request属性为socket对象
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询