2010-11-04 3 views
1

Я пытаюсь создать приложение, которое максимизирует выходной поток пользователя, непрерывно отправляя данные. Существует ли переменная, указывающая, сколько байтов находится в буфере out? И я говорю «out buffer», но есть ли лучший термин для данных, которые буферизуются до его отправки клиенту? Правильно ли я это делаю? Это не кажется практичным для self.transport.write() 100 мегабайт.отправка случайных данных с помощью Twisted

ответ

2

Путь Twisted предоставляет эту информацию с помощью пары API, обычно называемых «производители» и «потребители». Вы можете найти a document о них на сайте Twisted.

В вашем случае «натяжной производитель», вероятно, подходит, так как ваши случайные данные, вероятно, не происходят из источника событий, но могут генерироваться по требованию. Грубый эскиз может выглядеть примерно так (и, надеюсь, вышеупомянутый связанный документ будет объяснить, почему это работает):

from os import urandom 

from zope.interface import implements 

from twisted.internet.interfaces import IPullProducer 

class RandomProducer(object): 
    implements(IPullProducer) 

    def __init__(self, consumer): 
     self.consumer = consumer 


    def resumeProducing(self): 
     self.consumer.write(urandom(2 ** 16)) 


    def stopProducing(self): 
     pass 

Так, например, когда соединение установлено, вы можете зарегистрировать производитель с транспортом:

from twisted.internet.protocol import Protocol 

class RandomProtocol(Protocol): 
    def connectionMade(self): 
     self.transport.registerProducer(RandomProducer(self.transport), False) 

Это отправит случайные данные на клиента как можно быстрее.

Смежные вопросы