Twisted PerspectiveBroker / ServerFactory Вопросы - PullRequest
0 голосов
/ 05 апреля 2011

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

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

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

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

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

1 Ответ

2 голосов
/ 08 апреля 2011

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/.

...