操作Python的SocketServer框架编写网络处事措施
当前位置:以往代写 > Python教程 >操作Python的SocketServer框架编写网络处事措施
2019-06-14

操作Python的SocketServer框架编写网络处事措施

操作Python的SocketServer框架编写网络处事措施

1.媒介:

虽说用Python编写简朴的网络措施很利便,但巨大一点的网络措施照旧用现成的框架较量好。这样就可以专苦衷务逻辑,而不是套接字的各类细节。SocketServer模块简化了编写网络处事措施的任务。同时SocketServer模块也是Python尺度库中许多处事器框架的基本。

2.网络处事类:

SocketServer提供了4个根基的处事类:

TCPServer针对TCP套接字流

UDPServer针对UDP数据报套接字

UnixStreamServer和UnixDatagramServer针对UNIX域套接字,不常用。

它们的担任干系如下:

+————+

| BaseServer |

+————+

     |

     v

+———–+        +——————+

| TCPServer |——->| UnixStreamServer |

+———–+        +——————+

     |

     v

+———–+        +——————–+

| UDPServer |——->| UnixDatagramServer |

+———–+        +——————–+

2.1异步处理惩罚:

这个四个处事类都是同步处理惩罚请求的。一个请求没处理惩罚完不能处理惩罚下一个请求。要想支持异步模子,可以操作多担任让server类担任ForkingMixIn 或 ThreadingMixIn mix-in classes。

ForkingMixIn操作多历程(分叉)实现异步。

ThreadingMixIn操作多线程实现异步。

3.请求处理惩罚类:

要实现一项处事,还必需派生一个handler class请求处理惩罚类,并重写父类的handle()要领。handle要领就是用来专门是处理惩罚请求的。该模块是通过处事类和请求处理惩罚类组合来处理惩罚请求的。

SocketServer模块提供的请求处理惩罚类有BaseRequestHandler,以及它的派生类StreamRequestHandler和DatagramRequestHandler。从名字看出可以一个处理惩罚流式套接字,一个处理惩罚数据报套接字。

4.总结用SocketServer建设一个处事的步调:

1.建设一个request handler class(请求处理惩罚类),担任自BaseRequestHandler class并重写它的handle()要领,该要领将处理惩罚到的请求。

2.实例化一个server class工具,并将处事的地点和之前建设的request handler class通报给它。

3.挪用server class工具的handle_request() 或 serve_forever()要领来开始处理惩罚请求。

一个基于SocketServer的处事器示例:

from SocketServer import TCPServer,StreamRequestHandler
#界说请求处理惩罚类
class Handler(StreamRequestHandler):
def handle(self):
addr = self.request.getpeername()
print 'Got connection from ',addr
self.wfile.write('Thank you for connecting')
server = TCPServer(('',1234), handler)#实例化处事类工具
server.server_forever()#开启处事

5.实现异步,支持多毗连

前面先容处事类时提到过,四个根基的处事类默认是同步模子的。要想支持异步可以操作多担任从ForkingMixIn 或ThreadingMixInmix-in classes和一个根基的处事类担任来界说一个支持异步的处事类。好比:

class Server(ThreadingMixIn, TCPServer): pass

ForkingMixIn 要思量历程间的通信。ThreadingMixIn要思量线程会见同一变量时的同步和互斥。

一个利用了多线程处理惩罚的处事器示例:

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('Thank you for connection')
server = Server(('', 1234), Handler)#实例化处事类
server.serve_forever()#开启处事

    关键字:

在线提交作业