twisted中factory和protocol的结合
twisted中的factory和对应的protocol结合大概有2种方式:
1.在factory中定义:
protocol = POP3ClientProtocol
这种方式默认是在twisted的prtocol.py中的buildProtocol方法中来生成对应的protocol实例,代码如下:
def buildProtocol(self, addr):
p = self.protocol()
p.factory = self
return p
这样,在protocol的init方法中是无法得到当前factory对象的,只能是在protocol的某个事件回调函数里去拿到factory
经常,我们需要在factory和protocol之间传递一些参数,这种方式就比较麻烦,因为不确定在什么时间才能拿到那些参数的值。
2.在factory中重写buildProtocol方法:
def buildProtocol(self, addr):
pr = POP3ClientProtocol(self)
self.p = pr
return pr
这样,在生成protocol实例时,就可以把当前的factory给传递过去,因此,在protocol的init方法中是能得到当前factory对象
从而,也能在init时就顺利的拿到factory传递的一些参数了
第二种方式其实更灵活一下吧