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 کو ان callbacks کے پیش کردہ کام پر لاگو کرتا ہے جو اس سے پہلے نصب کیے گئے ہوں۔ بعد میں باڈی ریڈر شامل کرنا مختلف حد بیان کرے گا۔ اس ترتیب میں ٹائمر addTimeout بلانے پر شروع ہوتا ہے اور اس زنجیر میں زیر التوا درخواست اور باڈی کام کو محیط ہوتا ہے۔
بڑی یا لامحدود باڈیوں کے لیے اسٹریمنگ صارف استعمال کریں اور اس کی تکمیل اسی طرح ظاہر کریں۔ کلائنٹ کی طرف کی مہلت محدود کرتی ہے کہ آپ کی ایپلیکیشن کتنی دیر انتظار کرے؛ یہ پراکسی کی اپنی اپ اسٹریم کنکشن ٹائم آؤٹ کو دوبارہ تشکیل نہیں دیتی۔