2009-04-08 14 views
5

मैं एक अच्छी तरह से समर्थित बहुप्रचारित पायथन HTTP सर्वर की तलाश में हूं जो खंडित एन्कोडिंग उत्तरों का समर्थन करता है। (आईई। "प्रतिक्रियाओं पर स्थानांतरण-एन्कोडिंग: खंडित")। इस उद्देश्य के लिए शुरू करने के लिए सबसे अच्छा HTTP सर्वर आधार क्या है?पायथन HTTP सर्वर जो खंडित एन्कोडिंग का समर्थन करता है?

उत्तर

5

ट्विस्ट chunked transfer encoding (API link) का समर्थन करता है (HTTPChannel के लिए एपीआई दस्तावेज़ भी देखें)। ट्विस्ट का उपयोग करके कई उत्पादन-ग्रेड परियोजनाएं हैं (उदाहरण के लिए, ऐप्पल मैक ओएस एक्स सर्वर में iCalendar सर्वर के लिए इसका उपयोग करता है), इसलिए यह काफी अच्छी तरह से समर्थित और बहुत मजबूत है।

+0

धन्यवाद, मैं मुड़ के बारे में सुना है, लेकिन मेरी पहली धारणा है कि यह मेरे काम के लिए एक सा हैवीवेट था। मैं एक दूसरा रूप लेने जा रहा हूं, क्योंकि ऐसा लगता है कि आप बाकी चीजों के बिना बस twisted.web डाउनलोड और चला सकते हैं। – slacy

+0

मैं आपकी भावना को समझता हूं ... मुड़ता हुआ एक बड़ा एपीआई है, थोड़ा सा लगता है और इसमें कुछ सीखने की वक्र है। यह मुझे शुरुआत में भी बंद कर देता है, लेकिन कभी-कभी मुझे लगता है कि यह नौकरी के लिए सही उपकरण है :-) –

0

मुझे पूरा यकीन है कि डब्लूएसजीआई अनुपालन सर्वरों को इसका समर्थन करना चाहिए। अनिवार्य रूप से, डब्लूएसजीआई अनुप्रयोग पुनरावर्तक खंड लौटाते हैं, जो वेबसर्वर लौटाता है। मेरे पास इसका पहला हाथ अनुभव नहीं है, लेकिन यहां list of compliant servers है।

मुझे यह सोचना चाहिए कि यदि आपके पास पाइथन के बिल्टिन CGIHTTPServer का उपयोग करके आप जो खोज रहे हैं, उससे मिलते हैं तो यह आपके लिए रोल करना काफी आसान होगा। यह पहले से ही बहुप्रचारित है, इसलिए प्रतिक्रियाओं को तोड़ने के लिए यह आपके ऊपर निर्भर होगा।

2

ट्विस्ट चंक किए गए स्थानांतरण का समर्थन करता है और यह इतना पारदर्शी रूप से करता है। यानी, यदि आपका अनुरोध हैंडलर प्रतिक्रिया की लंबाई निर्दिष्ट नहीं करता है, तो मुड़ता स्वचालित रूप से खंडित हस्तांतरण पर स्विच हो जाएगा और यह Request.write पर एक कॉल प्रति कॉल उत्पन्न करेगा।

0

मैं Tornado का उपयोग कर यह करने के लिए कामयाब रहे:

#!/usr/bin/env python 

import logging 

import tornado.httpserver 
import tornado.ioloop 
import tornado.options 
import tornado.web 

from tornado.options import define, options 

define("port", default=8080, help="run on the given port", type=int) 

@tornado.web.stream_request_body 
class MainHandler(tornado.web.RequestHandler): 
    def post(self): 
     print() 
    def data_received(self, chunk): 
     self.write(chunk) 

     logging.info(chunk) 

def main(): 
    tornado.options.parse_command_line() 

    application = tornado.web.Application([ 
     (r"/", MainHandler), 
    ]) 

    http_server = tornado.httpserver.HTTPServer(application) 
    http_server.listen(options.port) 

    tornado.ioloop.IOLoop.current().start() 

if __name__ == "__main__": 
    main() 
संबंधित मुद्दे