2008-09-18 18 views
5

Khi giao dịch với các máy khách di động, rất phổ biến khi có sự chậm trễ nhiều giây trong khi truyền các yêu cầu HTTP. Nếu bạn đang phục vụ các trang hoặc dịch vụ ra khỏi một prefork Apache, các tiến trình con sẽ bị ràng buộc trong vài giây phục vụ một ứng dụng khách di động, ngay cả khi logic máy chủ ứng dụng của bạn được thực hiện trong 5ms. Tôi đang tìm máy chủ HTTP, máy chủ cân bằng hoặc máy chủ proxy hỗ trợ những điều sau:Bất kỳ proxy HTTP nào có hỗ trợ rõ ràng, có thể cấu hình cho yêu cầu/phản hồi đệm và kết nối bị trì hoãn?

  1. Yêu cầu đến proxy. Proxy bắt đầu đệm trong RAM hoặc trong đĩa yêu cầu, bao gồm tiêu đề và các đối tượng POST/PUT. Proxy KHÔNG mở kết nối đến máy chủ phụ trợ. Đây có lẽ là phần quan trọng nhất.

  2. Các máy chủ proxy dừng đệm theo yêu cầu khi:

    • Một giới hạn kích thước đã đạt (nói, 4KB), hoặc
    • Yêu cầu đã được nhận hoàn toàn, phần đầu và thân
  3. Chỉ bây giờ, với (một phần) yêu cầu trong bộ nhớ, một kết nối được mở cho phần phụ trợ và yêu cầu được chuyển tiếp.

  4. Phần phụ trợ gửi trả lời. Một lần nữa máy chủ proxy bắt đầu đệm nó ngay lập tức (lên đến kích thước rộng hơn, nói 64KB.)

  5. Vì proxy có bộ đệm đủ lớn, phản hồi phụ trợ được lưu trữ hoàn toàn trong máy chủ proxy trong vài miligiây và quá trình phụ trợ/luồng là miễn phí để xử lý nhiều yêu cầu hơn. Kết nối phụ trợ được đóng ngay lập tức.

  6. Proxy gửi lại phản hồi cho ứng dụng khách di động, nhanh hoặc chậm khi có khả năng, mà không cần kết nối với phần phụ trợ kết hợp tài nguyên.

Tôi khá chắc chắn bạn có thể làm 4-6 với Mực và nginx xuất hiện để hỗ trợ 1-3 (và trông khá độc đáo về mặt này). Câu hỏi của tôi là: có bất kỳ máy chủ proxy nào chấp nhận các khả năng đệm và không mở-kết nối-cho đến khi sẵn sàng này không? Có lẽ chỉ có một chút cấu hình Apache-fu làm cho hành vi đệm này tầm thường? Bất kỳ người nào trong số họ rằng nó không phải là một con khủng long như Squid và nó hỗ trợ một mô hình thực thi đơn lẻ, không đồng bộ, dựa trên sự kiện?

(Siderant: Tôi sẽ sử dụng nginx nhưng nó không hỗ trợ các cơ quan POST chunked, làm cho nó vô dụng phục vụ công cụ để khách hàng điện thoại di động Có giá rẻ 50 $ điện thoại di động tình yêu chunked POSTS ... tiếng thở dài.)

Trả lời

2

Fiddler , một công cụ miễn phí từ Telerik, có ít nhất một số thứ bạn đang tìm kiếm.

Cụ thể, hãy truy cập Rules | Custom Rules... và bạn có thể thêm mã Javascript tùy ý tại tất cả các điểm trong khi kết nối. Bạn có thể mô phỏng một số điều bạn cần với các cuộc gọi sleep().

Tôi không chắc phương pháp này cung cấp cho bạn khả năng kiểm soát bộ đệm tốt mà bạn muốn, tuy nhiên. Tuy nhiên, một cái gì đó có thể tốt hơn là không có gì?

+0

Có vẻ như một công cụ gỡ lỗi HTTP rất thú vị! Thật không may những gì tôi muốn là một máy chủ proxy, không phải là một giao diện người dùng máy tính để bàn để theo dõi/thao tác HTTP. –

0

Thật không may, tôi không biết về giải pháp làm sẵn cho việc này. Trong trường hợp xấu nhất, hãy xem xét phát triển nó cho mình, nói rằng, bằng cách sử dụng Java NIO - nó không nên mất hơn một tuần.

4

Điều gì về việc sử dụng cả nginx và Mực (khách hàng - Mực - nginx - phụ trợ)? Khi trả lại dữ liệu từ một chương trình phụ trợ, Squid chuyển đổi nó từ C-T-E: được chia thành luồng thông thường với Tập hợp nội dung độ dài, vì vậy có thể nó cũng có thể bình thường hóa POST.

+0

Điều này giống như cách duy nhất làm điều đó mà không phát triển một giải pháp tùy chỉnh, tôi không biết Squid đã biến đổi phần thân thành yêu cầu 1.0. Cảm ơn cho những người đứng đầu lên! –

2

Nginx có thể làm mọi thứ bạn muốn. Các thông số cấu hình mà bạn đang tìm kiếm là

http://wiki.codemongers.com/NginxHttpCoreModule#client_body_buffer_size

http://wiki.codemongers.com/NginxHttpProxyModule#proxy_buffer_size

+0

Nginx không hỗ trợ các cơ quan POST chunked, mà nhiều khách hàng di động Java ME sẽ mạnh mẽ gửi. Tôi đã sử dụng nginx trên các trang web đang được phục vụ chủ yếu cho các trình duyệt máy tính để bàn và nó đá, nhưng nó là vô ích khi giao dịch với hầu hết các khách hàng Java ME. –

+0

Có, tôi chỉ nhận thấy rằng chạy nginx 0.7.17. Tôi sẽ đưa nó lên danh sách gửi thư nginx. –

1

Squid 2.7 có thể hỗ trợ 1-3 với một bản vá:

Tôi đã thử nghiệm điều này và thấy nó hoạt động tốt, với điều kiện nó chỉ đệm vào bộ nhớ, không phải đĩa (trừ khi nó hoán đổi, tất nhiên, và bạn không muốn điều này), vì vậy bạn cần phải chạy nó trên một hộp được cung cấp thích hợp cho khối lượng công việc của bạn.

Bài đăng bị lỗi là một vấn đề đối với hầu hết các máy chủ và trung gian. Bạn có chắc bạn cần hỗ trợ không? Thông thường, khách hàng nên thử lại yêu cầu khi họ nhận được 411.