2013-05-08 42 views
12

Devo implementare un'applicazione server proxy HTTP che invierà richieste da più client a un server remoto.Server proxy HTTP Java

Ecco i passaggi:

  1. client richiesta l'ora di delega
  2. proxy richiesta l'ora di server di
  3. ritorna Server chiedono di Proxy
  4. ritorna proxy chiedono di client.

Non sono sicuro di come implementare questo proxy. Il mio primo pensiero è stato quello di implementare un'applicazione tomcat che utilizzi jersey/apache httpclient per inoltrare la richiesta al server remoto e restituire la risposta al client?

Esiste un modo migliore per implementare tale server proxy?

Il proxy dovrebbe gestire più thread.

risposta

9

Non è possibile implementarlo come servlet e non c'è motivo di utilizzare alcuna forma di client HTTP.

Un server senza caratteristiche proxy è un fatto semplice:

  1. accettare una connessione e avviare un thread per esso.
  2. Leggere la richiesta dal client fino alla riga vuota.
  3. Estrarre il comando GET o CONNECT o qualsiasi cosa sia e connettersi all'host nominato.
  4. Se ciò non riesce, inviare una risposta di errore HTTP appropriata, chiudere il socket e dimenticarsene.
  5. In caso contrario, avviare due thread per copiare byte, uno in ciascuna direzione. Niente di speciale, solo

    while ((count = in.read(buffer)) > 0) 
    { 
        out.write(buffer, 0, count); 
    } 
    
  6. Quando una di queste prese legge un EOS, arresto l'altra presa per l'uscita e uscire dal filo che prende l'EOS.
  7. Se il socket che era la sorgente di EOS è già stato disattivato per l'output, chiuderli entrambi.

Oppure utilizzare Apache SQUID.

8

Check out LittleProxy - ha classi integrate per le richieste in entrata e in uscita; puoi semplicemente scrivere il tuo codice in modo simile a come gestiresti una richiesta HTTP in un servlet.

+0

E sì, ha integrato il supporto CONNECT che in realtà non è integrato nelle API del servlet –