Twisted прокси хүсэлтэд биеийн хувьд хугацаа тогтоох
Прокси эцсийн цэгийн холболтын тайм-аутыг жижиг хариу биеийг уншихийг ч хамарсан Deferred хугацаатай хослуул.
ProxyAgent хурдан холбогдоод дараа нь хариу биеийг хязгааргүй хүлээж болно. Түүний прокси эцсийн цэгийн холболтын тайм-аут энэ дараагийн хүлээлтийг дүрслэхгүй.
Агент бүтээхдээ эцсийн цэг дээр холболтын хязгаар тогтоо. Доорх нийтийн HTTP хүсэлтийн хувьд нийтийн зуучлагчийг зөвшөөрвөл HTTP прокси жагсаалтаас баталгаажаагүй нэр дэвшигч хаягийг сольж болно:
endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)
Санах ойд цуглуулахаар төлөвлөж буй жижиг хариуд хугацаа нэмэхийн өмнө бие уншихийг Deferred гинжид оруул:
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()))
Энэ хэсэг програмд reactor болон тохируулсан агент аль хэдийн байгаа гэж үзнэ. ProxyAgent-ийн хүсэлтийн Deferred нь хариу объект өгдөг; readBody нь биеийн Deferred-ийг буцаана. Үүнийг callback-ээс буцаах нь гинжийг тэр үйлдлийг ч хүлээхэд хүргэнэ.
Байрлал чухал. Twisted addTimeout-ыг өмнө нь суулгасан callback-ууд төлөөлж буй ажилд хэрэглэнэ. Дараа нь бие уншигч нэмэх нь өөр хил дүрслэх болно. Энэ зохион байгуулалтад таймер addTimeout дуудагдах үед эхэлж, тухайн гинжин дэх хүлээгдэж буй хүсэлт болон биеийн ажлыг хамарна.
Том эсвэл хязгааргүй биед урсгалт хэрэглэгч ашиглаж, дуусахыг нь мөн адил дүрсэл. Клиент талын хугацаа нь таны програм хэр удаан хүлээхийг хязгаарладаг; энэ нь прокси өөрийн дээд урсгалын холболтын тайм-аутыг дахин тохируулахгүй.