2012-11-30 21 views
5

Tôi đang làm việc trên một máy khách http và tôi muốn thử nghiệm nó theo các yêu cầu mất một chút thời gian để hoàn thành. Tôi chắc chắn có thể đưa ra một kịch bản python cho phù hợp với nhu cầu của tôi, một cái gì đó về như:Tôi có thể phục vụ HTTP từ từ bằng cách nào?

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); 

nhưng điều này cảm thấy như một vấn đề người khác đã gặp phải. Có một cách dễ dàng để phục vụ các tập tin tĩnh với một nắp băng thông thấp vô lý, ngắn của một máy chủ quy mô đầy đủ như apache hoặc nginx.

Tôi đang làm việc trên Linux và cách tôi đã thử nghiệm cho đến nay là với python -m SimpleHTTPServer 8000 trong một thư mục chứa đầy đủ các tệp để phân phát. Tôi cũng không kém phần quan tâm đến một máy chủ dòng lệnh đơn giản khác hoặc một cách để hạn chế băng thông với một hoặc một vài lệnh iptables trên cổng tcp 8000 (hoặc bất kỳ thứ gì sẽ hoạt động).

Trả lời

5

Giải pháp tôi đang sử dụng hiện nay sử dụng máy chủ web "thực" nhưng dễ cấu hình hơn, nhẹ hơn. Tôi đã thêm các tập tin sau đây để con đường của tôi (trong ~/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))) 

Đó là một tập tin cấu hình lighttpd mà đóng vai trò như một proxy ngược với localhost; nguồn và đích cảng, cũng như một máy chủ tổng băng thông tối đa được cho là biến môi trường, và vì vậy nó có thể được gọi như:

$ cd /path/to/some/files 
$ python -m SimpleHTTPServer 8000 & 
$ LIGHTTPD_THROTTLE=60 LIGHTTPD_PORT=8001 LIGHTTPD_PROXY=8000 throttle.lighttpd 

để proxy server file python trên cổng 8000 với một 60kB thấp mỗi giây trên cổng 8001. Rõ ràng, lighttpd có thể được sử dụng để phục vụ các tệp, nhưng tập lệnh nhỏ này có thể được sử dụng để làm cho bất kỳ máy chủ httpnào http chậm

+0

Giải pháp tuyệt vời, tôi đã tạo một vùng chứa Docker nhỏ dựa trên đó: https://hub.docker.com/r/pbertera/lighttpd-throttle/ – Bertera

0

Tôi nhớ tôi đã từng có cùng một câu hỏi và tìm kiếm của tôi đã bật mô-đun Apache2 có tên là mod_bw (mod_bandwith có nghĩa là). Nó phục vụ tôi tốt cho các thử nghiệm của tôi.

+1

Đó là điều tôi có thể làm với nginx một cách dễ dàng. những gì tôi thực sự đang tìm kiếm mặc dù, là một giải pháp thiết lập zero về dễ dàng như 'python -m SimpleHTTPServer' trong một thư mục đầy đủ các tập tin. – SingleNegationElimination

1

Trên Windows, bạn có thể sử dụng Fiddler là công cụ gỡ lỗi proxy HTTP để mô phỏng tốc độ rất chậm. Có thể một công cụ tương tự tồn tại trên hệ điều hành bạn đang sử dụng.

+0

+1; mặc dù tôi không ở trên cửa sổ, nó có thể giúp người khác! – SingleNegationElimination