我正在尝试创建一个通过不断发送数据来最大化用户下游的应用程序。是否有一个变量可以告诉out缓冲区中有多少字节?我说“输出缓冲区”,但在发送到客户端之前缓冲的数据是否有更好的术语?我是以正确的方式来做这件事的吗? self.transport.write()100兆字节似乎不太实用。
答案 0 :(得分:2)
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
因此,例如,当建立连接时,您可以使用transport:
注册此生产者from twisted.internet.protocol import Protocol
class RandomProtocol(Protocol):
def connectionMade(self):
self.transport.registerProducer(RandomProducer(self.transport), False)
这将尽可能快地在客户端发送随机数据。