我正在使用 Twisted 框架编写 TCP/IP 服务器。我正在发送非常大的数据流,小块。所以我需要知道我发送的数据何时通过 Twisted 的缓冲区并进入操作系统,并且操作系统已准备好接收更多数据。有没有办法在发生这种情况时得到通知?
我这样做是为了测量网络吞吐量,所以我正在生成无限量的数据。
如果我使用的是普通套接字(不是 Twisted),答案是使用 poll() 和 POLLOUT,但我想使用 Twisted 来做到这一点。
我正在使用 Twisted 框架编写 TCP/IP 服务器。我正在发送非常大的数据流,小块。所以我需要知道我发送的数据何时通过 Twisted 的缓冲区并进入操作系统,并且操作系统已准备好接收更多数据。有没有办法在发生这种情况时得到通知?
我这样做是为了测量网络吞吐量,所以我正在生成无限量的数据。
如果我使用的是普通套接字(不是 Twisted),答案是使用 poll() 和 POLLOUT,但我想使用 Twisted 来做到这一点。
是的。
self.transport.registerProducer(AProducer(), True)
, 进而
from zope.interface import implementer
from twisted.internet.interfaces import IPushProducer
@implementer(IPushProducer)
class AProducer:
def pauseProducing(self):
"stop producing data; buffers are full"
def resumeProducing(self):
"resume producing data; buffers have space"
您可以在面向消费者和生产者的 Twisted 文档中找到更多信息。
有所谓的推拉生产者。显然,您需要推送生产者:)
http://twistedmatrix.com/documents/13.1.0/core/howto/producers.html