Ein ProxyAgent kan kopla til raskt og deretter venta ubegrensa på ein svarkropp. Tidsavbrotet for tilkopling på proxy-endepunktet skildrar ikkje den seinare ventinga.

Set ei tilkoplingsgrense på endepunktet når du byggjer agenten. For den offentlege HTTP-førespurnaden nedanfor kan ein uautentisert kandidat frå HTTP-proxylista erstatta adressa dersom offentlege mellommenn er tillatne:

endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
                              timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)

For eit lite svar du vil samla i minnet, ta med lesing av kroppen i Deferred-kjeda før du legg til fristen:

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()))

Utdraget føreset at programmet allereie har sin reactor og ein konfigurert agent. Førespurnads-Deferreden til ProxyAgent gjev eit svarobjekt; readBody returnerer Deferreden for kroppen. Returnerer du han frå callbacken, ventar kjeda òg på den operasjonen.

Plasseringa har noko å seia. Twisted nyttar addTimeout på arbeidet som callbackane installerte før han representerer. Å leggja til ein kroppslesar etterpå ville skildra ei anna grense. I denne ordninga startar timeren når addTimeout vert kalla, og dekkjer den ventande førespurnaden og kroppsarbeidet i den kjeda.

Bruk ein straumekonsument for store eller ubegrensa kroppar og framstill fullføringa på same måte. Ein frist på klientsida avgrensar kor lenge programmet ditt ventar; han konfigurerer ikkje oppatt proxyen sitt eige oppstraums tilkoplingstidsavbrot.

Relaterte artiklar