J'essaie de créer une application qui maximise l'aval de l'utilisateur en envoyant des données en continu. Y at-il une variable qui indique combien d'octets sont dans le tampon de sortie? Et je dis «hors tampon», mais y a-t-il un meilleur terme pour les données qui sont tamponnées avant d'être envoyées au client? Est-ce que je vais à ce sujet de la bonne façon? Cela ne semble pas pratique à self.transport.write() 100 mégaoctets.envoyer des données aléatoires avec Twisted
1
A
Répondre
2
La façon dont Twisted expose cette information se fait avec une paire d'API communément appelées «producteurs» et «consommateurs». Vous pouvez trouver a document à leur sujet sur le site Twisted.
Dans votre cas, un "pull producer" est probablement approprié, car vos données aléatoires ne proviennent probablement pas d'une source d'événement, mais peuvent être générées à la demande. Une esquisse pourrait ressembler à ceci (et nous espérons que le document lié ci-dessus expliquent pourquoi cela fonctionne):
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
Ainsi, par exemple, lorsqu'une connexion est établie, vous pouvez enregistrer ce producteur avec le transport:
from twisted.internet.protocol import Protocol
class RandomProtocol(Protocol):
def connectionMade(self):
self.transport.registerProducer(RandomProducer(self.transport), False)
Ceci enverra des données aléatoires au client aussi vite que possible.