आप इस्तेमाल किया सॉकेट पर इस तरह के निम्न स्तर संपत्ति के लिए उपयोग करने के लिए की जरूरत है, तो आप कुछ वस्तुओं को ओवरलोड करना होगा।
सबसे पहले, आप HTTPHandler का एक उपवर्ग बनाने के लिए, मानक पुस्तकालय में है कि आवश्यकता होगी:
class HTTPHandler(AbstractHTTPHandler):
def http_open(self, req):
return self.do_open(httplib.HTTPConnection, req)
http_request = AbstractHTTPHandler.do_request_
आप देख सकते हैं, यह एक HTTPConnection
का उपयोग करता है कनेक्शन खोलने में ... आप होगा इसे भी ओवरराइड करने के लिए;) connect()
विधि को अपग्रेड करने के लिए।
कुछ इस तरह एक अच्छी शुरुआत होना चाहिए:
class LowLevelHTTPConnection(httplib.HTTPConnection):
def connect(self):
httplib.HTTPConnection.connect(self)
self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
class LowLevelHTTPHandler(HTTPHandler):
def http_open(self, req):
return self.do_open(LowLevelHTTPConnection, req)
urllib2 बहुत चालाक आप कुछ हैंडलर उपवर्ग और फिर इसका इस्तेमाल करने की अनुमति देने के लिए है, urllib2.build_opener इस के लिए बना है:
urllib2.install_opener(urllib2.build_opener(LowLevelHTTPHandler)) # tell urllib2 to use your HTTPHandler in replacement of the standard HTTPHandler
httpRequest = urllib2.Request("http:/www....com")
pageContent = urllib2.urlopen(httpRequest)
pageContent.readline()
स्रोत
2013-07-26 13:10:12
वेब सर्वर को कॉल करते समय आप इसे क्यों सेट करते हैं ??? – jgauffin
मैं विशिष्ट समय पर एक वेबसाइट पर मतदान कर रहा हूं, जब कुछ जानकारी वहां प्रकाशित की जानी चाहिए। गति बहुत महत्वपूर्ण है, इसलिए TCP_NODELAY को पैकेट भेजने से पहले बड़े हिस्से में डेटा के छोटे हिस्सों को जमा करने से बचें। –
* * डेटा के छोटे हिस्से क्या हैं? HTTP अनुरोध लगभग एक ही प्रेषण() में लाइब्रेरी द्वारा निश्चित रूप से फ़्लश किया जाएगा और एक ही पैकेट के रूप में टीसीपी द्वारा भेजा जाएगा। और आपके अंत में TCP_NODELAY सेट करने से यह नहीं बदलता कि सहकर्मी प्रतिक्रिया कैसे भेजता है। असली सवाल नहीं है। अनुरोध के साथ – EJP