ProxyAgent יכול להתחבר במהירות ואז להמתין לגוף תגובה ללא הגבלה. פסק הזמן של החיבור בנקודת הקצה של ה-proxy אינו מתאר את ההמתנה המאוחרת הזו.

הגדירו גבול חיבור בנקודת הקצה בעת בניית הסוכן. בבקשת ה-HTTP הציבורית שלמטה, מועמד לא מאומת מרשימת ה-proxy של 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 וסוכן מוגדר. ה-Deferred של הבקשה ב-ProxyAgent מחזיר אובייקט תגובה; readBody מחזיר את ה-Deferred של הגוף. החזרתו מה-callback גורמת לשרשרת להמתין גם לפעולה הזו.

המיקום חשוב. Twisted מחיל את addTimeout על העבודה שהפונקציות שהותקנו לפניו מייצגות. הוספת קורא גוף לאחר מכן הייתה מתארת גבול אחר. בסידור הזה הטיימר מתחיל כשקוראים ל-addTimeout ומכסה את הבקשה הממתינה ואת עבודת הגוף בשרשרת הזו.

השתמשו בצרכן זורם לגופים גדולים או בלתי מוגבלים וייצגו את השלמתו באותו אופן. מועד בצד הלקוח מגביל כמה זמן היישום שלכם ממתין; הוא אינו מגדיר מחדש את פסק הזמן של החיבור במעלה הזרם של ה-proxy עצמו.

מאמרים קשורים