Grizzly学习笔记(一)

Grizzly是基于JAVA NIO的网络通信框架,网上一些网友的测试来看,grizzly的性能比较好。

所以决定学习一下这个framework.
Grizzly目前有两个版本,一个是1.9.x,一个2.x. 目前除了2.x还有一些Guide外,1.9及其早期版本都没有文档,网上资料相对MINA要少得多。
更不可思议的是,Grizzly的每个版本的API,变化都非常大(没见过这么玩的),严重的不兼容,用起来很不方便。早段时间调一个Grizzly1.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.    }  

启动Server,再启动client,查看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. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值