2010-11-04 75 views
1

我正試圖通過不斷髮送數據來創建一個最大化用戶下游的應用程序。是否有一個變量可以告訴輸出緩衝區中有多少個字節?我說「out buffer」,但是在發送給客戶端之前緩衝的數據有沒有更好的術語?我是否以正確的方式去做這件事? self.transport.write()100兆似乎不實用。用Twisted發送隨機數據

回答

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 

因此,例如,當連接建立時,您可以在此生產與運輸註冊:

from twisted.internet.protocol import Protocol 

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

這將盡可能快地在客戶端發送隨機數據。