根据扭曲的文档 ,每次建立连接时都会创建一个新的协议实例,但是我正在观察两者之间的某种数据共享。
简而言之,我已经定义了一个类,每个协议将用于状态
class JSONCollector():
char_buffer = StringIO.StringIO()
...
def process_data(self, data):
...
self.char_buffer.write(char)
协议实例化它
class JSONProtocol(protocol.Protocol):
def __init__(self):
self.json_collector = JSONCollector()
def dataReceived(self, data):
self.json_collector.process_data(data)
self.transport.write(str(self))
然而,当我将以下语句添加到 dataReceived self.transport.write(str(self.json_collector.char_buffer)) self.transport.write(str(self)) 时,每个连接似乎都获得了相同的 JSONCollector 实例
我得到以下信息:
连接 1:0x968ae2c 处的 StringIO.StringIO 实例>< 0x969036c 处的主.JSONProtocol 实例>
连接 2:0x968ae2c 处的 StringIO.StringIO 实例>< 0x969068c 处的主.JSONProtocol 实例>
此外,每次我输入文本时,都会显示从其他连接输入的文本。所以似乎出于某种奇怪的原因 StringIO() 实例是共享的,我是否遗漏了什么。我想我可以使用工厂通过 addr 分隔缓冲区并确保每个协议只使用自己的缓冲区,但不需要共享存储,我宁愿不跳过箍
谢谢你。