Donu al Twisted-proksea peto limon por ĝia korpo
Kombinu la konektan tempolimon de la proksea finpunkto kun Deferred-limdato, kiu ankaŭ kovras legadon de malgranda responda korpo.
ProxyAgent povas konekti rapide kaj poste atendi senlime respondan korpon. La konekta tempolimo de ĝia proksea finpunkto ne priskribas tiun postan atendo.
Agordu konektan limon sur la finpunkto, kiam vi konstruas la agenton. Por la publika HTTP-peto sube, nepruvita kandidato el la HTTP-proksea listo povas anstataŭigi la adreson, se publikaj perantoj estas permesataj:
endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)
Por malgranda respondo, kiun vi intencas kolekti en memoro, enigu korpan legadon en la Deferred-ĉenon antaŭ ol aldoni ĝian limdaton:
from twisted.web.client import readBody
d = agent.request(b'GET', b'http://example.com/')
d.addCallback(readBody)
d.addTimeout(10, reactor)
d.addCallback(lambda body: print(len(body)))
d.addErrback(lambda failure: print(failure.getErrorMessage()))
La fragmento supozas, ke la aplikaĵo jam havas sian reactor kaj agordan agenton. La peto-Deferred de ProxyAgent donas respondan objekton; readBody redonas la Deferred por la korpo. Redoni ĝin el la callback igas la ĉenon atendi ankaŭ tiun operacion.
La loko gravas. Twisted aplikas addTimeout al la laboro reprezentata de callback-oj instalitaj antaŭ ĝi. Aldoni korpan leganton poste priskribus alian limon. En ĉi tiu aranĝo la tempigilo komenciĝas kiam addTimeout estas vokata kaj kovras la atendanta peton kaj la korpan laboron en tiu ĉeno.
Uzu fluan konsumanton por grandaj aŭ senlimaj korpoj kaj reprezentu ĝian finiĝon same. Limdato ĉe la klienta flanko limigas kiom longe via aplikaĵo atendas; ĝi ne reagordas la propran alfluantan konektan tempolimon de la prokseo.