Взаимодействующие серверы с использованием Twisted? - PullRequest
0 голосов
/ 03 марта 2011

Я отключился в некоторых Twisted, и я столкнулся с проблемой.Я реализую пару серверов, к которым можно подключиться с помощью telnet localhost x

Мой код обрабатывает это так:

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

reactor.listenTCP(12002, server2, ....) и т. Д.

Затем они используют мою фабрику для создания протокола

Мне интересно, как я могу заставить эти серверы взаимодействовать друг с другом.Например, скажем, клиент отправляет запрос на обновление значения, общего для каждого сервера, и я хочу передать это значение другим серверам, чтобы обновить их текущее значение.Я посмотрел на reactor.connectTCP, но, похоже, это не то, что я хочу.Есть ли способ подключения к моим серверам без использования команды telnet?

1 Ответ

0 голосов
/ 03 марта 2011

Конечно. Используйте для этого обычные приемы 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()

Теперь две фабрики делят часть изменчивого состояния. Протоколы могут получить доступ к своим фабрикам, потому что значение по умолчанию ServerFactory услужливо устанавливает себя в качестве атрибута протоколов, которые он создает, поэтому протоколы также могут достигать общего изменяемого состояния на фабриках. Один увеличивает счетчик, другой возвращает значение.

Вы можете построить множество таких сценариев с помощью общих состояний и вызовов методов для объектов, не относящихся к протоколу, не являющихся фабриками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...