python socketserver handle方法传递参数样例
实现思路
从官方文档及其他地方并未找到合适的handle传参的方法,因此考虑重写部分类或类方法。
如果使用TCPServer启动的服务实例,则我们在注册server实例的时候就应该将参数传递过去,因此我们考虑重写下TCPServer的__init__方法:
以增加一个info参数为例
1 | # 重写TCPServer构造函数 |
如果说仅仅是串行单Client端的情况下,我们用重写好的M有TCPServer去启动实例就满足需求了,但是大多数情况下,我们需要用到异步处理,多Client端的情况,也就是需要用ThreadingTCPServer去启动一个实例。
因此如果我们要异步,ThreadingTCPServer也需要重写一下。
先查看下原来的ThreadingTCPServer是怎么写的:
官方的写法:
1 | class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass |
很显然,ThreadingTCPServer并没有其他的操作,因此我们只需要将TCPServer换成我们已经重写好的MyTCPServer即可达到效果。
重写ThreadingTCPServer:
1 | # 如果使用异步的形式则需要再重写ThreadingTCPServer |
最终实现的完整的代码(demo)
1 | from socketserver import TCPServer, ThreadingMixIn, BaseRequestHandler |
需要注意的是,使用自己传入的参数,需要用self.server.xxx
因为server是TcpServer的对象
打印出来的我们自定义的info参数的值(效果):
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Guf's Blog!
评论