2013-05-08 23 views
12

Tôi cần triển khai ứng dụng máy chủ proxy HTTP sẽ yêu cầu proxy từ nhiều máy khách đến máy chủ từ xa.Máy chủ proxy HTTP Java

Sau đây là các bước sau:

  1. Khách hàng yêu cầu chuyển tiếp để proxy
  2. Proxy yêu cầu chuyển tiếp đến máy chủ
  3. lợi nhuận máy chủ yêu cầu Proxy
  4. lợi nhuận Proxy yêu cầu khách hàng.

Tôi không chắc chắn cách triển khai proxy này. Suy nghĩ đầu tiên của tôi là để thực hiện một ứng dụng tomcat trong đó sử dụng jersey/apache httpclient để chuyển tiếp các yêu cầu đến máy chủ từ xa và trả lại phản hồi lại cho khách hàng?

Có cách nào tốt hơn để triển khai máy chủ proxy như vậy không?

Proxy sẽ cần xử lý nhiều chuỗi.

Trả lời

9

Bạn không thể triển khai dưới dạng servlet và không có lý do gì để sử dụng bất kỳ hình thức ứng dụng khách HTTP nào.

Một máy chủ proxy gì đặc biệt là một điều thực sự đơn giản:

  1. Chấp nhận một kết nối và bắt đầu một chủ đề cho nó.
  2. Đọc yêu cầu từ khách hàng đến dòng trống.
  3. Trích xuất lệnh GET hoặc CONNECT hoặc bất kỳ lệnh gì và kết nối với máy chủ lưu trữ có tên.
  4. Nếu không thành công, hãy gửi lại phản hồi lỗi HTTP thích hợp, đóng ổ cắm và quên nó.
  5. Nếu không, hãy bắt đầu hai chuỗi để sao chép byte, mỗi chuỗi theo từng hướng. Không có gì lạ mắt, chỉ cần

    while ((count = in.read(buffer)) > 0) 
    { 
        out.write(buffer, 0, count); 
    } 
    
  6. Khi một trong các ổ cắm này đọc EOS, hãy tắt ổ cắm khác để thoát ra và thoát khỏi sợi có EOS.
  7. Nếu ổ cắm là nguồn của EOS đã được tắt cho đầu ra, hãy đóng cả hai.

Hoặc sử dụng SQUID Apache.

8

Kiểm tra LittleProxy - nó có các lớp được tích hợp sẵn cho các yêu cầu gửi đến và gửi đi; bạn chỉ có thể viết mã của bạn tương tự như cách bạn xử lý một yêu cầu HTTP trong một servlet.

+0

Và có, nó đã được xây dựng trong hỗ trợ CONNECT không thực sự được tích hợp vào các API servlet –