Grizzly是基于JAVA NIO的网络通信框架,网上一些网友的测试来看,grizzly的性能比较好。
Grizzly目前有两个版本,一个是1.9.x,一个2.x. 目前除了2.x还有一些Guide外,1.9及其早期版本都没有文档,网上资料相对MINA要少得多。
更不可思议的是,Grizzly的每个版本的API,变化都非常大(没见过这么玩的),严重的不兼容,用起来很不方便。早段时间调一个Grizzly1.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();
-
-
-
- TCPSelectorHandler tcpHandler = new TCPSelectorHandler();
- tcpHandler.setPort(1900);
- controller.setSelectorHandler(tcpHandler);
-
-
- DefaultProtocolChain protocolChain = new DefaultProtocolChain();
-
-
- protocolChain.addFilter(new ReadFilter());
- protocolChain.addFilter(new LogFilter());
-
- protocolChain.addFilter(new EchoFilter());
-
-
-
-
-
-
-
- controller.getProtocolChainInstanceHandler().offer(protocolChain);
-
- controller.start();
- }
- }
启动Server,再启动client,查看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()));
- }
- }
本文转自 anranran 51CTO博客,原文链接:http://blog.51cto.com/guojuanjun/651608