用Twisted发送随机数据

问题描述:

我正试图通过不断发送数据来创建一个最大化用户下游的应用程序。是否有一个变量可以告诉输出缓冲区中有多少个字节?我说“out buffer”,但是在发送给客户端之前缓冲的数据有没有更好的术语?我是否以正确的方式去做这件事? self.transport.write()100兆似乎不实用。用Twisted发送随机数据

Twisted公开此信息的方式是使用一对通常称为“生产者”和“消费者”的API。您可以在Twisted网站上找到关于它们的a document

在你的情况下,“拉生产者”可能是合适的,因为你的随机数据可能不是来自事件源,但可以根据需要生成。草图看起来像这样(希望上面的链接的文档将解释为什么这个工程):

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) 

这将尽可能快地在客户端发送随机数据。