Twisted PerspectiveBroker/ServerFactory Вопросы

Пытаюсь поиграть с твистом. Я уже пытался создать сервер и клиент, используя соответствующий Factory. Это фантастическая структура, но можно отправлять только строки :( Я хотел бы отправить некоторые объекты списка или массива в качестве начала и, возможно, позже использовать объекты с сервера внутри клиентов. Но в настоящее время я застрял с несколькими простыми вопросами:

1) В модели Factory я использовал такие методы, как «clientConnectionFailed» или «clientConnectionLost», как я могу получить тот же метод, используя PB? Они были очень полезны для предотвращения проблем клиент/сервер.

2) Я также использовал такие методы, как «dataReceived» и «connectionLost» или «connectionMade», как я могу получить те же функции этих методов, используя PB?

Как видите, я хотел бы начать с переписывания своего кода с использованием модели PB вместо Factory. Я смотрел образцы, но, в отличие от Фабрики, не могу их понять.

Заранее спасибо за любую помощь =)


person lonk    schedule 05.04.2011    source источник


Ответы (1)


PBClientFactory — это ClientFactory, поэтому вы по-прежнему получаете вызовы clientConnectionFailed и clientConnectionLost. Подкласс и переопределение, если хотите. Вы также можете использовать метод notifyOnDisconnect, который реализуется как Broker (классом протокола, используемым с PB), так и RemoteReference, экземпляры которого часто встречаются при использовании PB.

Вы все еще можете переопределить connectionMade и connectionLost в протоколе, если хотите. Как я уже говорил, протокол Broker. Создайте его подкласс, переопределите некоторые методы и установите свой подкласс (класс, а не экземпляр) в качестве атрибута protocol в файле PBClientFactory.

Однако вы не должны переопределять Broker.dataReceived. PB не является упорядоченным, надежным, потоковым транспортом байтов. Вы не ждете доставки порции байтов, а затем отвечаете своей порцией байтов. PB — это протокол вызова удаленных объектов и методов. Вы используете его для вызова методов по сети и передачи объектов этим вызовам методов. Если вы клиент, чтобы иметь возможность вызывать методы на вашем сервере, вы определяете remote_* методов.

Документация PB объясняет это более подробно. См. раздел «Перспективный брокер» на странице http://twistedmatrix.com/documents/current/core/howto/.

person Jean-Paul Calderone    schedule 08.04.2011