2009-08-12 5 views
2

私はプロキシサーバーの次のコードを持っています。正しいアプローチであればISですか? comerially配備されている場合、これは負荷/トラフィッキングをハンドリングすることができますか?プロキシサーバーのJava

package proxyserver; 


import com.sun.corba.se.spi.activation.Server; 
import java.net.* ; 
import java.io.* ; 
import java.lang.* ; 
import java.util.* ; 



/** 
* 
* @author user 
*/ 
public class Main { 

    /** 
    * @param args the command line arguments 
    */ 
    // Variable to track if an error occurred 
boolean errorOccurred = false; 

//Variables for the host and port parameters 


    public static void main(String[] args) { 
     // TODO code application logic here 

     int localPort = -1; 
     int remotePort = -1; 
     String remoteHost = "www.youtube.com"; 

     System.out.print("dwdsw"); 


     Integer parseLocalPort = new Integer(555); 
     Integer parseRemotePort = new Integer(80); 
     localPort =80 ; 

     remotePort = 80; 

     //Create a listening socket at proxy 

ServerSocket server = null; 
try 
{ 
    server = new ServerSocket(localPort); 
} 

catch(IOException e) 
{ 
    System.err.println("Error: " + e.getMessage()); 
    System.exit(-1); 
} 

//Loop to listen for incoming connection, 
//and accept if there is one 

Socket incoming = null; 
Socket outgoing = null; 

while(true) 
{ 
    try 
    { 
     // Create the 2 sockets to transmit incoming 
     // and outgoing traffic of proxy server 
     incoming = server.accept(); 
     outgoing = new Socket(remoteHost, remotePort); 

     // Create the 2 threads for the incoming 
     // and outgoing traffic of proxy server 
     ProxyThread thread1 = new ProxyThread(incoming, outgoing); 
     thread1.start(); 

     ProxyThread thread2 = new ProxyThread(outgoing, incoming); 
     thread2.start(); 
    } 
    catch (UnknownHostException e) 
    { 
     System.err.println("Error: Unknown Host " + remoteHost); 
     System.exit(-1); 
    } 
    catch(IOException e) 
    { 
     //continue 
     System.exit(-2);; 
    } 
} 




    } 

} 

今プロキシclasss

package proxyserver; 

/** 
* 
* @author user 
*/ 
import java.net.* ; 
import java.io.* ; 
import java.lang.* ; 
import java.util.* ; 

class ProxyThread extends Thread 
{ 
    Socket incoming, outgoing; 

    ProxyThread(Socket in, Socket out) 
    { 
     incoming = in; 
     outgoing = out; 
    } 

    // Overwritten run() method of thread, 
    // does the data transfers 
    public void run() 
    { 
     byte[] buffer = new byte[5000]; 
     int numberRead = 0; 
     OutputStream toClient; 
     InputStream fromClient; 

     try{ 
      toClient = outgoing.getOutputStream(); 
      fromClient = incoming.getInputStream(); 

      while(true) 
      { 
       numberRead = fromClient.read(buffer, 0, 50); 
       if(numberRead == -1) 
       { 
        incoming.close(); 
        outgoing.close(); 
       } 
       String st = new String(buffer,"US-ASCII"); 
       System.out.println("\n\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n\nXXXXXXXXXXXXXXXX\n\n" + st); 


       toClient.write(buffer, 0, numberRead); 
      } 
     } 
     catch(IOException e) 
     { 
     } 
     catch(ArrayIndexOutOfBoundsException e) 
     { 
     } 
    } 
} 
+0

誰かがplzは.Iはここに新しいですし、ああ、私はそれを得る整形 –

+0

感謝を行う方法を知らない、それをフォーマット!あなたは会社のファイアウォールを回避しようとしていたその人で、仕事ではなくYouTubeで映画を見て過ごすことができました。 –

+2

のためにそれを –

答えて

1

1
など、それは原則的に権利について見えますが、あなたは回復力を高め、スループットを最大にポインタのための TCP Proxyのようなオープンソースのバージョンを見てみる必要があります

[OK ...十分におやすみ:-)]

それはうまくいくようです:

あなたはProxyクラスにSystem.errに印刷
  1. ものが台無しすることができます。 (私が前に言ったように、あなただけのすべてのWebページがASCIIでエンコードされていることを前提とすることはできません!!)
  2. あなたはおそらく一度に多くの50の以上のバイトを読み込むべきである....あなたは、高スループットをしたい場合は特に。
  3. スレッドを作成したり投げ捨てるのではなく、メインクラスでスレッドプールを使用しているはずです。また、任意の時点で許可したいスレッドの数に上限を設定する必要があります。
  4. 応答などの配信に時間がかかるサーバーについては、おそらく何かをする必要があります。

最後に、これに応じて:

これは、それが商業的に展開されている場合 負荷/トラフィックを処理することができるだろう?

このプログラムをどのくらい負荷することはできますか。まず、プロセッサとネットワークインターフェイスハードウェアによって異なります。

関連する問題