ProxyAgent se može brzo povezati, a zatim neograničeno čekati tijelo odgovora. Vremensko ograničenje veze njegovog proxy endpointa ne opisuje to kasnije čekanje.

Postavite ograničenje veze na endpointu kada gradite agenta. Za javni HTTP zahtjev ispod, neautentificirani kandidat s liste HTTP proxyja može zamijeniti adresu ako su javni posrednici dozvoljeni:

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

Za mali odgovor koji namjeravate prikupiti u memoriji, uključite čitanje tijela u Deferred lanac prije dodavanja roka:

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

Isječak pretpostavlja da aplikacija već ima svoj reactor i konfiguriranog agenta. Deferred zahtjeva ProxyAgenta vraća objekt odgovora; readBody vraća Deferred za tijelo. Vraćanjem iz callbacka lanac čeka i tu operaciju.

Položaj je važan. Twisted primjenjuje addTimeout na rad koji predstavljaju callbackovi instalirani prije njega. Dodavanje čitača tijela poslije opisalo bi drugu granicu. U ovom rasporedu tajmer počinje kada se pozove addTimeout i pokriva zahtjev na čekanju i rad s tijelom u tom lancu.

Koristite streaming potrošač za velika ili neograničena tijela i predstavite njegov završetak na isti način. Rok na strani klijenta ograničava koliko dugo vaša aplikacija čeka; on ne rekonfigurira vlastito vremensko ograničenje veze proxyja prema uzvodno.

Povezani članci