使用Twisted发送随机数据

时间:2010-11-04 12:53:50

标签: python twisted

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

1 个答案:

答案 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)

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