ねじれたドキュメントによると 、接続が確立されるたびに新しい Protocol インスタンスが作成されますが、2 つの間である種のデータ共有が見られます。
簡単に言えば、各プロトコルが状態に使用するクラスを定義しました
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 で分離し、各プロトコルが独自のバッファーのみを使用するようにすることができると思いますが、共有ストレージを必要とせずに、フープをジャンプしたくありません
ありがとうございました。