2012-11-30 28 views
5

मैं एक http क्लाइंट पर काम कर रहा हूं और मैं उन अनुरोधों पर परीक्षण करना चाहता हूं जो खत्म होने में कुछ समय लगते हैं। मैं निश्चित रूप से की तरह के बारे में मेरी जरूरत है, कुछ सूट करने के लिए एक अजगर स्क्रिप्ट के साथ आ सकता है:मैं धीरे-धीरे HTTP की सेवा कैसे कर सकता हूं?

def slow_server(environ, start_response): 
    with getSomeFile(environ) as file_to_serve: 
     block = file_to_serve.read(1024); 
     while block: 
      yield block 
      time.sleep(1.0) 
      block = file_to_serve.read(1024); 

लेकिन यह लगता है जैसे एक समस्या दूसरों को पहले से ही सामना करना पड़ा। क्या एक बेहद कम बैंडविड्थ कैप के साथ स्थैतिक फ़ाइलों को सेवा देने का कोई आसान तरीका है, जो अपाचे या nginx जैसे पूर्ण पैमाने सर्वर से कम है।

मैं लिनक्स पर काम कर रहा हूं, और जिस तरह से मैं परीक्षण कर रहा हूं, python -m SimpleHTTPServer 8000 सेवा के लिए फाइलों से भरा निर्देशिका में है। मैं एक और सरल कमांड लाइन सर्वर में समान रूप से रूचि रखता हूं या टीसीपी पोर्ट 8000 (या जो भी काम करेगा) पर एक या कुछ iptables आदेशों के साथ बैंडविड्थ सीमित करने का एक तरीका है।

उत्तर

5

जिस समाधान के लिए मैं जा रहा हूं वह अब "असली" वेबसर्वर का उपयोग करता है, लेकिन एक, lighttpd को कॉन्फ़िगर करने के लिए बहुत आसान है। मैं (~/bin में अपनी) मेरे पथ के लिए निम्न फ़ाइल जोड़ी है

#! /usr/sbin/lighttpd -Df 

server.document-root = "/dev/null" 
server.modules = ("mod_proxy") 
server.kbytes-per-second = env.LIGHTTPD_THROTTLE 
server.port = env.LIGHTTPD_PORT 
proxy.server = ("" => (("host" => "127.0.0.1", "port" => env.LIGHTTPD_PROXY))) 

जो एक lighttpd कॉन्फ़िग फ़ाइल है कि एक रिवर्स प्रॉक्सी स्थानीय होस्ट करने के लिए के रूप में कार्य है, स्रोत और गंतव्य बंदरगाहों, साथ ही एक सर्वर की कुल अधिकतम बैंडविड्थ वातावरण चर के रूप में दिया जाता है, और इसलिए यह की तरह लागू किया जा सकता है: प्रति पर दूसरा एक कम 60KB साथ पोर्ट 8000 पर

$ cd /path/to/some/files 
$ python -m SimpleHTTPServer 8000 & 
$ LIGHTTPD_THROTTLE=60 LIGHTTPD_PORT=8001 LIGHTTPD_PROXY=8000 throttle.lighttpd 
प्रॉक्सी को

अजगर फ़ाइल सर्वर पोर्ट 8001. जाहिर है, फाइलों की सेवा के लिए lighttpd का उपयोग किया जा सकता है, लेकिन इस छोटी स्क्रिप्ट का उपयोग को http सर्वर धीमा

+0

ग्रेट सॉल्यूशन, मैंने उस पर आधारित एक छोटा डॉकर कंटेनर बनाया: https://hub.docker.com/r/pbertera/lighttpd-throttle/ – Bertera

0

मुझे याद है कि मुझे एक बार एक ही प्रश्न था और मेरी खोज ने एक अपाचे 2 मॉड्यूल चालू किया जो mod_bw (mod_bandwith है) के नाम से चला जाता है। यह मेरे परीक्षण के लिए मुझे अच्छी तरह से सेवा की।

+1

ऐसा कुछ है जो मैं आसानी से पर्याप्त nginx के साथ कर सकता हूं। जो मैं वास्तव में खोज रहा हूं, फाइलों से भरे निर्देशिका में 'पायथन -एम SimpleHTTPServer' जितना आसान है, शून्य सेटअप समाधान है। – SingleNegationElimination

1

विंडोज़ पर आप फिडलर का उपयोग कर सकते हैं जो बहुत धीमी गति को अनुकरण करने के लिए एक HTTP प्रॉक्सी डीबगिंग टूल है। हो सकता है कि आप जिस ओएस का उपयोग कर रहे हों, उस पर एक समान टूल मौजूद है।

+0

+1; हालांकि मैं खिड़कियों पर नहीं हूं, यह दूसरों की मदद कर सकता है! – SingleNegationElimination