Adj határidőt a Twisted proxy kérésének a törzsére
Kombináld a proxy végpont kapcsolódási időkorlátját egy Deferred-határidővel, amely egy kis választörzs olvasását is lefedi.
A ProxyAgent gyorsan kapcsolódhat, majd korlátlanul várhat egy választörzsre. A proxy végpont kapcsolódási időkorlátja nem írja le ezt a későbbi várakozást.
Az ügynök építésekor állíts kapcsolódási korlátot a végponton. Az alábbi nyilvános HTTP-kérésnél a HTTP-proxy lista egy hitelesítetlen jelöltje helyettesítheti a címet, ha a nyilvános közvetítők engedélyezettek:
endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)
Egy kicsi válaszhoz, amelyet memóriában szeretnél összegyűjteni, vedd fel a törzs olvasását a Deferred-láncba a határidő hozzáadása előtt:
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()))
A részlet feltételezi, hogy az alkalmazásnak már van reactorja és beállított ügynöke. A ProxyAgent kérésének Deferredje egy válaszobjektumot ad; a readBody a törzs Deferredjét adja vissza. A callbackből visszaadva a lánc erre a műveletre is vár.
Az elhelyezés számít. A Twisted az addTimeoutot az előtte telepített callbackek által képviselt munkára alkalmazza. Egy utána hozzáadott törzsolvasó más határt írna le. Ebben az elrendezésben az időzítő az addTimeout hívásakor indul, és lefedi a függőben lévő kérést és a törzsmunkát abban a láncban.
Nagy vagy korlátlan törzsekhez használj streamelő fogyasztót, és ugyanígy ábrázold a befejezését. Az ügyféloldali határidő korlátozza, meddig vár az alkalmazásod; nem állítja át magának a proxynak a felsőbb szintű kapcsolódási időkorlátját.