Я пишу клиент, которому необходимо установить несколько независимых каналов связи, каждый со своим собственным уникальным портом на сервере, с сервером через серию отправляющих и получающих сообщений. Я знаю, как это сделать, используя сокет send и recv, предоставляя каждому каналу связи сокет и отправляйте его и возвращайте в этот сокет. Мне нужно сделать эту работу в Twisted и найти потенциально полезные интерфейсы, включая Factory и ProcessProtocol. Однако интерфейсы протокола не предоставляют способ отправки сообщений. Является ли ProcessProtocol хорошим выбором для моей задачи и как я могу отправить сообщения ProcessProtocol?Применение Twisted Python в соединениях TCP/IP?
ответ
В случае, если вы об этом не знаете, я бы хотел рассказать об отличном Twisted finger
tutorial, который проходит через библиотеку в хорошем темпе, но с достаточной детализацией, что вы знаете, что происходит.
Чтобы ответить на ваш вопрос, я бы сказал, что вы на правильном пути с протоколом и (клиентским) заводом. Я думаю, что самый чистый способ сделать то, что вы ищете (при условии, что вам нужно подключаться к разным портам, потому что они являются выходами для разных данных) было бы создание пары фабрики/протокола для каждого порта, который вы хотите подключить к/, а затем использовать внешний класс для обработки логики приложения, суммирующей все из них. Как правило, вы не хотите, чтобы ваша прикладная логика смешалась с вашей сетевой логикой.
Простой пример: (обратите внимание на использование self.transport.write для передачи данных)
from twisted.internet.protocol import Protocol, ClientFactory
from sys import stdout
from foobar_application import CustomAppObject
class FooProtocol(Protocol):
def connectionMade(self):
# Use self.transport.write to send data to the server
self.transport.write('Hello server this is the Foo protocol.')
self.factory.do_app_logic()
class FooFactory(ClientFactory):
protocol = FooProtocol
def __init__(self, app_object=None):
self.app = app_object
def do_app_logic(self):
self.app.do_something()
class BarProtocol(Protocol):
def dataReceived(self, data):
stdout.write('Received data from server using the Bar protocol.')
self.factory.do_fancy_logic(data)
class BarFactory(ClientFactory):
protocol = BarProtocol
def __init__(self, app_object=None):
self.app = app_object
def do_fancy_logic(self, data):
self.app.do_something_else(data)
logic_obj = CustomAppObject()
reactor.listenTCP(8888, FooFactory(app_object=logic_obj)
reactor.listenTCP(9999, BarFactory(app_object=logic_obj)
reactor.run()
Вы также можете посмотреть на 'Writing Clients' docs on the Twisted site.
- 1. Mutex в Python Twisted
- 2. Python Twisted Socket Server
- 3. python netsnmp с twisted
- 4. Запустить Python от Twisted
- 5. Python Twisted Custom DNS
- 6. python twisted HTTP Proxy
- 7. Twisted execute python file
- 8. Twisted framework Python
- 9. Python Twisted с callInThread
- 10. Python Twisted Daemon
- 11. Python Twisted sendLine()
- 12. создание крючков в python twisted
- 13. Python - Twisted: POST в форме
- 14. Ошибка регистрации в Python Twisted?
- 15. Асинхронное программирование в Python Twisted
- 16. раздражающих Twisted Python проблема
- 17. Iron Python Twisted
- 18. OpenWrt Crosscompiling Python-Twisted
- 19. twisted python ISFTPServer openDirectory
- 20. двухмерное применение в python
- 21. Вызов кода Python от Twisted
- 22. python twisted multithreaded tcp proxy
- 23. базы данных для Python Twisted
- 24. twisted self.transport.write() - Python - Добавленный вывод
- 25. Python Twisted Отложенные: требуется уточнение
- 26. Установка python-twisted на yocto
- 27. Twisted Python pause/postpone реактор
- 28. пример для twisted dns python
- 29. Переменные класса Python Twisted LineReceiver?
- 30. Python: Twisted сервер и значение
Я понятия не имею, что вы здесь задаете. Вы просто хотите отправить данные? Вам нужны дискретные границы сообщений? Какую документацию вы уже прочитали? Прошли ли вы через учебник Twisted? – Glyph