Отправка с Twisted клиента на Twisted сервер, только это в одну сторону - PullRequest
2 голосов
/ 17 сентября 2010

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

Как мне добиться этого с помощью концепции Twisted, управляемой событиями?В настоящее время я использую connectionMade метод Protocol, но я не думаю, что это правильный путь.

class Send(Protocol):

    def connectionMade(self):
        while True:
            data = queue.get()
            self.transport.write(data + "\n")
            self.transport.doWrite()

Я уверен, что это не способ сделать это.; -)

Добавление : Моя проблема в том, что я не могу представить, какое событие использовать для этого.Я думаю, что событие connectionMade не является правильным, но я никогда не достигну другого события, кроме connectionLost в моем случае, потому что сервер ничего не отправляет клиенту.Должен ли я изменить это поведение?

Ответы [ 2 ]

2 голосов
/ 17 сентября 2010

Нет, это определенно неправильный способ сделать это. Никогда, никогда не звоните doWrite.

Проблема в том, что я ставлю queue.get() только блоки, пока не появятся данные. Если возможно, используйте неблокирующие средства передачи сообщений, а не потоки. Например, ваш поток просто callFromThread к вашему протоколу Send может что-то сделать.

Но, при условии блокирующего вызова get, что-то вроде этого может сработать:

from twisted.internet.protocol import Protocol
from twisted.internet.threads import deferToThread

class Send(Protocol):
    def connectionMade(self):
        self.qget()

    def qget(self, data=None):
        if data is not None:
            self.transport.write(data)
        deferToThread(queue.get).addCallback(self.qget)
1 голос
/ 17 сентября 2010

Вот еще один вопрос, который использует UDP / Multicast для связи между сервером и клиентом

Я бы также предложил дополнительное чтение и примеры из искаженной документации.

...