یک 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 و عامل پیکربندی‌شده خود را دارد. Deferred درخواست ProxyAgent یک شیء پاسخ می‌دهد؛ readBody مقدار Deferred بدنه را برمی‌گرداند. بازگرداندن آن از callback باعث می‌شود زنجیره منتظر آن عملیات هم بماند.

جای قرارگیری مهم است. Twisted تابع addTimeout را بر کاری اعمال می‌کند که callbackهای نصب‌شده پیش از آن نمایندگی می‌کنند. افزودن خواننده بدنه پس از آن مرز دیگری را توصیف می‌کرد. در این چیدمان زمان‌سنج هنگام فراخوانی addTimeout شروع می‌شود و درخواست در انتظار و کار بدنه در همان زنجیره را پوشش می‌دهد.

برای بدنه‌های بزرگ یا نامحدود از مصرف‌کننده جریانی استفاده کنید و پایان آن را به همین شکل نمایش دهید. مهلت سمت کلاینت محدود می‌کند که برنامه شما چه مدت صبر کند؛ مهلت اتصال بالادستی خود پروکسی را بازپیکربندی نمی‌کند.

مقالات مرتبط