もちろん。これには通常の Python テクニックを使用してください。更新される値の例を見てみましょう。あるサーバーへの接続と、他のサーバーへの接続に送信される値によって増分される単純なカウンターにします。
from twisted.internet import reactor
from twisted.internet.protocol import ServerFactory, Protocol
class Counter(object):
def __init__(self):
self._value = 0
def increment(self):
self._value += 1
def get(self):
return self._value
class Incrementor(Protocol):
def connectionMade(self):
self.factory.value.increment()
self.transport.loseConnection()
class Reporter(Protocol):
def connectionMade(self):
self.transport.write("Value is %d\n" % (self.factory.value.get(),))
self.transport.loseConnection()
server1 = ServerFactory()
server1.protocol = Incrementor
server2 = ServerFactory()
server2.protocol = Reporter
server1.value = server2.value = Value()
reactor.listenTCP(12001, server1)
reactor.listenTCP(12002, server2)
reactor.run()
2 つのファクトリは現在、変更可能な状態の一部を共有しています。ServerFactory
デフォルトはインスタンス化するプロトコルの属性として自分自身を設定するため、プロトコルはファクトリにアクセスできます。そのため、プロトコルはファクトリで共有された変更可能な状態に到達することもできます。1 つはカウンターをインクリメントし、もう 1 つは値を取得します。
非プロトコル、非ファクトリ オブジェクトに対する共有状態とメソッド呼び出しを使用して、このような多くのシナリオを構築できます。