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 വിളിക്കുമ്പോൾ ആരംഭിക്കുകയും ആ ശൃംഖലയിലെ തീർപ്പാക്കാത്ത അഭ്യർത്ഥനയും ബോഡി ജോലിയും ഉൾക്കൊള്ളുകയും ചെയ്യുന്നു.
വലിയതോ പരിധിയില്ലാത്തതോ ആയ ബോഡികൾക്ക് സ്ട്രീമിംഗ് ഉപഭോക്താവ് ഉപയോഗിക്കുകയും അതിന്റെ പൂർത്തീകരണം അതേ രീതിയിൽ പ്രതിനിധീകരിക്കുകയും ചെയ്യുക. ക്ലയന്റ് വശത്തുള്ള സമയപരിധി നിങ്ങളുടെ ആപ്ലിക്കേഷൻ എത്ര കാത്തിരിക്കുമെന്ന് പരിമിതപ്പെടുത്തുന്നു; അത് പ്രോക്സിയുടെ സ്വന്തം അപ്സ്ട്രീം കണക്ഷൻ ടൈംഔട്ട് പുനഃക്രമീകരിക്കുന്നില്ല.