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 આપે છે. કૉલબેકમાંથી તેને પરત કરવાથી શૃંખલા તે કામગીરીની પણ રાહ જુએ છે.
સ્થાન મહત્વનું છે. Twisted addTimeoutને તેના પહેલાં સ્થાપિત કૉલબેક દ્વારા રજૂ થતા કામ પર લાગુ કરે છે. પછી બોડી રીડર ઉમેરવો બીજી સીમા દર્શાવશે. આ ગોઠવણમાં ટાઇમર addTimeout કૉલ થાય ત્યારે શરૂ થાય છે અને તે શૃંખલામાંના બાકી વિનંતી અને બોડી કામને આવરી લે છે.
મોટી કે અમર્યાદિત બોડી માટે સ્ટ્રીમિંગ વપરાશકર્તા વાપરો અને તેની પૂર્તિ તે જ રીતે દર્શાવો. ક્લાયન્ટ-બાજુની સમયમર્યાદા તમારી એપ્લિકેશન કેટલી રાહ જુએ તે મર્યાદિત કરે છે; તે પ્રોક્સીની પોતાની અપસ્ટ્રીમ કનેક્શન સમયમર્યાદા ફરીથી ગોઠવતી નથી.