Grizzly学習ノート(一)


GrizzlyはJAVAベース NIOのネット通信のフレームワーク、ネット上のいくつかのネットユーザーのテストから見ると、grizzlyの性能は比較的に良いです.
だからこのframeworkを勉強することにしました.
Grizzlyは現在2つのバージョンがあり、1つは1.9.x、1つは2.xである.現在、2.xのほかにいくつかのGuideがあるほか、1.9とその初期バージョンにはドキュメントがなく、ネット上の資料はMINAよりずっと少ない.
さらに不思議なことに、Grizzlyの各バージョンのAPIは、変化が非常に大きく(このように遊んでいるのを見たことがありません)、深刻な互換性がなく、使いにくいです.早くGrizzly 1.3のコードを調整して、率直に言って、あまり書いていないので、コードも乱れています.新しいコードは、コードのスタイルから言えば、ずいぶん変わっています.これも私が彼を学ぶことにした理由です.
本題に入りましょう.
 
今日は午前中に調整して、やっとdemoを書いて、ドキュメントがなくて、彼のtest caseを参考にするしかなくて、注釈は私がコードの中に置いた.
 

  
  
  
  
  1. package org.guojje.grizzly;  
  2.  
  3. import java.io.IOException;  
  4.  
  5. import com.sun.grizzly.Controller;  
  6. import com.sun.grizzly.DefaultProtocolChain;  
  7. import com.sun.grizzly.ProtocolFilter;  
  8. import com.sun.grizzly.TCPSelectorHandler;  
  9. import com.sun.grizzly.DefaultProtocolChain.EventHandler;  
  10. import com.sun.grizzly.DefaultProtocolChain.Phase;  
  11. import com.sun.grizzly.filter.EchoFilter;  
  12. import com.sun.grizzly.filter.LogFilter;  
  13. import com.sun.grizzly.filter.ReadFilter;  
  14. import com.sun.grizzly.util.WorkerThreadImpl;  
  15.  
  16. public class Server {  
  17.    public static void main(String args[]) throws IOException{  
  18.      // ,  
  19.      Controller controller = new Controller();  
  20.      // SelectorHandler, , Controller.start  
  21.      // , TCPSelectorHandler  
  22.        
  23.      TCPSelectorHandler tcpHandler = new TCPSelectorHandler();  
  24.      tcpHandler.setPort(1900);  
  25.      controller.setSelectorHandler(tcpHandler);  
  26.        
  27.      // Chain,  
  28.      DefaultProtocolChain protocolChain = new DefaultProtocolChain();  
  29.  
  30.     // ReadFilter,  
  31.      protocolChain.addFilter(new ReadFilter());  
  32.      protocolChain.addFilter(new LogFilter());  
  33.      //  
  34.      protocolChain.addFilter(new EchoFilter());  
  35.      // ,ReadFilter,EchoFilter , 。  
  36.      //filter 。 LogFilter, EchoFilter ,  
  37.      // Buffer ,LogFilter LOG 。  
  38.      // 。  
  39.  
  40.        
  41.     // Chain  
  42.     controller.getProtocolChainInstanceHandler().offer(protocolChain);  
  43.     // Controller  
  44.     controller.start();  
  45.    }  

サーバを起動し、クライアントを再起動し、console出力を表示すると、通信が成功したことがわかります.

  
  
  
  
  1. package org.guojje.grizzly;  
  2.  
  3. import java.io.IOException;  
  4. import java.net.InetAddress;  
  5. import java.net.InetSocketAddress;  
  6. import java.net.UnknownHostException;  
  7. import java.nio.ByteBuffer;  
  8.  
  9. import com.sun.grizzly.TCPConnectorHandler;  
  10. import com.sun.grizzly.util.OutputWriter;  
  11.  
  12. public class Client {  
  13.     
  14.     public static void main(String[] args) throws UnknownHostException, IOException {  
  15.           
  16.         TCPConnectorHandler tch = new TCPConnectorHandler();  
  17.         tch.connect(new InetSocketAddress(InetAddress.getLocalHost(), 1900));  
  18.         OutputWriter.flushChannel(tch.getUnderlyingChannel(), ByteBuffer.wrap("Hello".getBytes()));  
  19.         ByteBuffer bb = ByteBuffer.allocate(100);  
  20.         tch.read(bb, true);  
  21.         System.out.println(new String(bb.array(),0,bb.remaining()));  
  22.     }  
  23. }