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を参考にするしかなくて、注釈は私がコードの中に置いた.
サーバを起動し、クライアントを再起動し、console出力を表示すると、通信が成功したことがわかります.
だからこのframeworkを勉強することにしました.
Grizzlyは現在2つのバージョンがあり、1つは1.9.x、1つは2.xである.現在、2.xのほかにいくつかのGuideがあるほか、1.9とその初期バージョンにはドキュメントがなく、ネット上の資料はMINAよりずっと少ない.
さらに不思議なことに、Grizzlyの各バージョンのAPIは、変化が非常に大きく(このように遊んでいるのを見たことがありません)、深刻な互換性がなく、使いにくいです.早くGrizzly 1.3のコードを調整して、率直に言って、あまり書いていないので、コードも乱れています.新しいコードは、コードのスタイルから言えば、ずいぶん変わっています.これも私が彼を学ぶことにした理由です.
本題に入りましょう.
今日は午前中に調整して、やっとdemoを書いて、ドキュメントがなくて、彼のtest caseを参考にするしかなくて、注釈は私がコードの中に置いた.
- package org.guojje.grizzly;
-
- import java.io.IOException;
-
- import com.sun.grizzly.Controller;
- import com.sun.grizzly.DefaultProtocolChain;
- import com.sun.grizzly.ProtocolFilter;
- import com.sun.grizzly.TCPSelectorHandler;
- import com.sun.grizzly.DefaultProtocolChain.EventHandler;
- import com.sun.grizzly.DefaultProtocolChain.Phase;
- import com.sun.grizzly.filter.EchoFilter;
- import com.sun.grizzly.filter.LogFilter;
- import com.sun.grizzly.filter.ReadFilter;
- import com.sun.grizzly.util.WorkerThreadImpl;
-
- public class Server {
- public static void main(String args[]) throws IOException{
- // ,
- Controller controller = new Controller();
- // SelectorHandler, , Controller.start
- // , TCPSelectorHandler
-
- TCPSelectorHandler tcpHandler = new TCPSelectorHandler();
- tcpHandler.setPort(1900);
- controller.setSelectorHandler(tcpHandler);
-
- // Chain,
- DefaultProtocolChain protocolChain = new DefaultProtocolChain();
-
- // ReadFilter,
- protocolChain.addFilter(new ReadFilter());
- protocolChain.addFilter(new LogFilter());
- //
- protocolChain.addFilter(new EchoFilter());
- // ,ReadFilter,EchoFilter , 。
- //filter 。 LogFilter, EchoFilter ,
- // Buffer ,LogFilter LOG 。
- // 。
-
-
- // Chain
- controller.getProtocolChainInstanceHandler().offer(protocolChain);
- // Controller
- controller.start();
- }
- }
サーバを起動し、クライアントを再起動し、console出力を表示すると、通信が成功したことがわかります.
- package org.guojje.grizzly;
-
- import java.io.IOException;
- import java.net.InetAddress;
- import java.net.InetSocketAddress;
- import java.net.UnknownHostException;
- import java.nio.ByteBuffer;
-
- import com.sun.grizzly.TCPConnectorHandler;
- import com.sun.grizzly.util.OutputWriter;
-
- public class Client {
-
- public static void main(String[] args) throws UnknownHostException, IOException {
-
- TCPConnectorHandler tch = new TCPConnectorHandler();
- tch.connect(new InetSocketAddress(InetAddress.getLocalHost(), 1900));
- OutputWriter.flushChannel(tch.getUnderlyingChannel(), ByteBuffer.wrap("Hello".getBytes()));
- ByteBuffer bb = ByteBuffer.allocate(100);
- tch.read(bb, true);
- System.out.println(new String(bb.array(),0,bb.remaining()));
- }
- }