2013-05-08 8 views
12

मुझे एक HTTP प्रॉक्सी सर्वर एप्लिकेशन को लागू करने की आवश्यकता है जो एकाधिक क्लाइंट से दूरस्थ सर्वर पर प्रॉक्सी अनुरोध करेगा।जावा HTTP प्रॉक्सी सर्वर

  1. क्लाइंट प्रॉक्सी
  2. प्रॉक्सी सर्वर के लिए आगे अनुरोध करने के लिए आगे अनुरोध
  3. सर्वर रिटर्न प्रॉक्सी के लिए अनुरोध
  4. प्रॉक्सी रिटर्न ग्राहक के लिए अनुरोध:

    ये कदम उठाएँ।

मुझे यकीन नहीं है कि मुझे इस प्रॉक्सी को कैसे कार्यान्वित करना चाहिए। मेरा पहला विचार एक टोमकैट एप्लिकेशन को लागू करना था जो रिमोट सर्वर से अनुरोध अग्रेषित करने के लिए जर्सी/अपाचे httpclient का उपयोग करता है और प्रतिक्रिया को क्लाइंट को वापस लौटाता है?

क्या ऐसे प्रॉक्सी सर्वर को लागू करने का कोई बेहतर तरीका है?

प्रॉक्सी को एकाधिक थ्रेड को संभालने की आवश्यकता होगी।

उत्तर

9

आप इसे सर्वलेट के रूप में कार्यान्वित नहीं कर सकते हैं, और HTTP क्लाइंट के किसी भी रूप का उपयोग करने का कोई कारण नहीं है।

  1. एक कनेक्शन स्वीकार करें और इसके लिए एक धागा शुरू:

    एक कुरूप प्रॉक्सी सर्वर एक बहुत आसान बात है।

  2. क्लाइंट से रिक्त रेखा तक अनुरोध पढ़ें।
  3. GET या CONNECT कमांड निकालें या जो कुछ भी है और नामित होस्ट से कनेक्ट करें।
  4. यदि यह विफल हो जाता है, तो एक उचित HTTP त्रुटि प्रतिक्रिया वापस भेजें, सॉकेट बंद करें, और इसके बारे में भूल जाओ।
  5. अन्यथा बाइट्स की प्रतिलिपि बनाने के लिए दो धागे शुरू करें, प्रत्येक दिशा में एक। फैंसी कुछ भी नहीं है, बस

    while ((count = in.read(buffer)) > 0) 
    { 
        out.write(buffer, 0, count); 
    } 
    
  6. उन सॉकेट में से एक एक EOS पहचान लेगा, तो बंद उत्पादन के लिए अन्य सॉकेट और धागा है कि EOS मिला से बाहर निकलें।
  7. यदि ईओएस का स्रोत सॉकेट पहले ही आउटपुट के लिए बंद हो गया है, तो दोनों को बंद करें।

या अपाचे स्क्विड का उपयोग करें।

8

LittleProxy देखें - इसमें आने वाले और जाने वाले अनुरोधों के लिए अंतर्निहित कक्षाएं हैं; आप केवल अपना कोड लिख सकते हैं जैसे कि आप सर्वलेट में HTTP अनुरोध को कैसे संभालेंगे।

+0

और हां, यह कनेक्ट समर्थन में बनाया गया है जो वास्तव में सर्वलेट एपीआई में नहीं बनाया गया है –

संबंधित मुद्दे