0

私はいくつかの Twisted に手を出していて、問題に遭遇しました。を使用して接続できるいくつかのサーバーを実装していますtelnet localhost x

私のコードは次のように処理します:

reactor.listenTCP(12001, server1, ....)

reactor.listenTCP(12002, server2, ....)

次に、これらは私の工場を使用してプロトコルを構築します

これらのサーバーを相互にやり取りさせる方法を知りたいです。たとえば、クライアントが各サーバーに共通の値を更新するリクエストを送信し、この値を他のサーバーに中継して現在の値を更新したいとします。私は調べましreactor.connectTCPたが、これは私が望むことをしていないようです。telnet コマンドを使用せずにサーバーに接続する方法はありますか?

4

1 に答える 1

0

もちろん。これには通常の 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 つは値を取得します。

非プロトコル、非ファクトリ オブジェクトに対する共有状態とメソッド呼び出しを使用して、このような多くのシナリオを構築できます。

于 2011-03-03T04:22:03.337 に答える