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 ಕರೆದಾಗ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ ಮತ್ತು ಆ ಸರಪಳಿಯಲ್ಲಿನ ಬಾಕಿ ವಿನಂತಿ ಹಾಗೂ ಬಾಡಿ ಕೆಲಸವನ್ನು ಒಳಗೊಳ್ಳುತ್ತದೆ.
ದೊಡ್ಡ ಅಥವಾ ಮಿತಿಯಿಲ್ಲದ ಬಾಡಿಗಳಿಗೆ ಸ್ಟ್ರೀಮಿಂಗ್ ಗ್ರಾಹಕವನ್ನು ಬಳಸಿ ಮತ್ತು ಅದರ ಪೂರ್ಣಗೊಳ್ಳುವಿಕೆಯನ್ನು ಅದೇ ರೀತಿಯಲ್ಲಿ ಪ್ರತಿನಿಧಿಸಿ. ಕ್ಲೈಂಟ್-ಬದಿಯ ಗಡುವು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಎಷ್ಟು ಕಾಲ ಕಾಯುತ್ತದೆ ಎಂಬುದನ್ನು ಮಿತಿಗೊಳಿಸುತ್ತದೆ; ಅದು ಪ್ರಾಕ್ಸಿಯ ಸ್ವಂತ ಅಪ್ಸ್ಟ್ರೀಮ್ ಸಂಪರ್ಕ ಟೈಮೌಟ್ ಅನ್ನು ಮರುಸಂರಚಿಸುವುದಿಲ್ಲ.