+------------+
| BaseServer |
+------------+
|
v
+-----------+ +------------------+
| TCPServer |------->| UnixStreamServer |
+-----------+ +------------------+
|
v
+-----------+ +--------------------+
| UDPServer |------->| UnixDatagramServer |
+-----------+ +--------------------+
def __init__(self, server_address, RequestHandlerClass):
"""Constructor. May be extended, do not override."""
self.server_address = server_address
self.RequestHandlerClass = RequestHandlerClass
self.__is_shut_down = threading.Event()
self.__shutdown_request = False
def serve_forever(self, poll_interval=0.5):
self.__is_shut_down.clear()
try:
while not self.__shutdown_request:
r, w, e = _eintr_retry(select.select, [self], [], [],
poll_interval)
if self in r:
self._handle_request_noblock()
finally:
self.__shutdown_request = False
self.__is_shut_down.set()
_handle_request_noblock
def _handle_request_noblock(self):
try:
request, client_address = self.get_request()
except socket.error:
return
if self.verify_request(request, client_address):
try:
self.process_request(request, client_address)
except:
self.handle_error(request, client_address)
self.shutdown_request(request)
verify_request
def verify_request(self, request, client_address):
return True
process_request
def process_request(self, request, client_address):
self.finish_request(request, client_address)
self.shutdown_request(request)
finish_request
def finish_request(self, request, client_address):
self.RequestHandlerClass(request, client_address, self)
def __init__(self, request, client_address, server):
self.request = request
self.client_address = client_address
self.server = server
self.setup()
try:
self.handle()
finally:
self.finish()
__init__(server_address, RequestHandlerClass):
BaseServer.server_address
BaseServer.RequestHandlerClass
serve_forever():
select()
BaseServer._handle_request_noblock()
BaseServer.get_request() -> request, client_addres
BaseServer.verify_request()
BaseServer.process_request()
BaseServer.process_request()
BaseServer.finish_request()
BaseServer.RequestHandlerClass()
BaseRequestHandler.__init__(request)
BaseRequestHandler.request
BaseRequestHandler.client_address = client_address
BaseRequestHandler.setup()
BaseRequestHandler.handle()
BaseServer.shutdown_request()
BaseServer.close_request()
BaseServer.shutdown_request()
BaseServer.close_request()
def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True):
BaseServer.__init__(self, server_address, RequestHandlerClass)
self.socket = socket.socket(self.address_family,
self.socket_type)
if bind_and_activate:
self.server_bind()
self.server_activate()
server_bind
def server_bind(self):
if self.allow_reuse_address:
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.socket.bind(self.server_address)
self.server_address = self.socket.getsockname()
server_activate def server_activate(self): self.socket.listen(self.request_queue_size)
def get_request(self): """Get the request and client address from the socket. """ return self.socket.accept()
def setup(self):
self.connection = self.request
if self.timeout is not None:
self.connection.settimeout(self.timeout)
if self.disable_nagle_algorithm:
self.connection.setsockopt(socket.IPPROTO_TCP,
socket.TCP_NODELAY, True)
self.rfile = self.connection.makefile('rb', self.rbufsize)
self.wfile = self.connection.makefile('wb', self.wbufsize)
__init__(server_address, RequestHandlerClass):
BaseServer.server_address
BaseServer.RequestHandlerClass
TCPServer.socket = socket.socket(self.address_family, self.socket_type)
TCPServer.server_bind()
TCPServer.server_activate()
serve_forever():
select()
BaseServer._handle_request_noblock()
TCPServer.get_request() -> request, client_addres
socket.accept()
BaseServer.verify_request()
BaseServer.process_request()
BaseServer.process_request()
BaseServer.finish_request(request, client_address)
BaseServer.RequestHandlerClass()
BaseRequestHandler.__init__(request)
BaseRequestHandler.request
BaseRequestHandler.client_address = client_address
StreamRequestHandler.setup()
StreamRequestHandler.connection = StreamRequestHandler.request
StreamRequestHandler.rfile
StreamRequestHandler.wfile
BaseRequestHandler.handle()
StreamRequestHandler.finsih()
StreamRequestHandler.wfile.close()
StreamRequestHandler.rfile.close()
BaseServer.shutdown_request(request)
TCPServer.shutdown()
request.shutdown()
TCPServer.close_request(request)
request.close()
TCPServer.shutdown_request(request)
TCPServer.shutdown(request)
request.shutdown()
TCPServer.close_request(request)
request.close()
process_request
def process_request(self, request, client_address):
t = threading.Thread(target = self.process_request_thread,
args = (request, client_address))
t.daemon = self.daemon_threads
t.start()
process_request_thread
def process_request_thread(self, request, client_address):
try:
self.finish_request(request, client_address)
self.shutdown_request(request)
except:
self.handle_error(request, client_address)
self.shutdown_request(request)
class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass
ThreadingMixIn -- TCPServer - StreamRequestHandler
__init__(server_address, RequestHandlerClass):
BaseServer.server_address
BaseServer.RequestHandlerClass
TCPServer.socket = socket.socket(self.address_family, self.socket_type)
TCPServer.server_bind()
TCPServer.server_activate()
serve_forever():
select()
BaseServer._handle_request_noblock()
TCPServer.get_request() -> request, client_addres
socket.accept()
BaseServer.verify_request()
BaseServer.process_request()
ThreadingMixIn.process_request()
t = threading.Thread(target = ThreadingMixIn.process_request_thread)
ThreadingMixIn.process_request_thread
BaseServer.finish_request(request, client_address)
BaseServer.RequestHandlerClass()
BaseRequestHandler.__init__(request)
BaseRequestHandler.request
BaseRequestHandler.client_address = client_address
StreamRequestHandler.setup()
StreamRequestHandler.connection = StreamRequestHandler.request
StreamRequestHandler.rfile
StreamRequestHandler.wfile
BaseRequestHandler.handle()
StreamRequestHandler.finsih()
StreamRequestHandler.wfile.close()
StreamRequestHandler.rfile.close()
BaseServer.shutdown_request(request)
TCPServer.shutdown()
request.shutdown()
TCPServer.close_request(request)
request.close()
TCPServer.shutdown_request(request)
TCPServer.shutdown(request)
request.shutdown()
TCPServer.close_request(request)
request.close()
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有