博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Grizzly学习笔记(一)
阅读量:5774 次
发布时间:2019-06-18

本文共 2505 字,大约阅读时间需要 8 分钟。

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. }  

 本文转自 anranran 51CTO博客,原文链接:http://blog.51cto.com/guojuanjun/651608

转载地址:http://rpoux.baihongyu.com/

你可能感兴趣的文章
一般处理程序(.ashx)中session的使用方法
查看>>
EasyUI笔记(二)Layout布局
查看>>
ios View之间的切换 屏幕旋转
查看>>
js创建表格时最好要创建tbody元素
查看>>
ASN.1探索 - 3 编码规则与传输语法(1 - BER)(转)
查看>>
BZOJ2208:[JSOI2010]连通数(DFS)
查看>>
第三章:内存分配与回收策略
查看>>
Linux系统的优势
查看>>
jquery压缩图片插件
查看>>
Apple Swift学习资料汇总
查看>>
如何获取目录下所有文件名 c++
查看>>
SQL Server数据库无法启动(万金油解决办法)
查看>>
有关UIView、subview的几个基础知识点-IOS开发 (实例)
查看>>
【SICP练习】49 练习2.17
查看>>
OC 线程操作3 - NSOperation
查看>>
上载EXCEL到SAP系统的方法之一
查看>>
jquery 使用on方法给元素绑定事件
查看>>
通过 ['1', '2', '3'].map(parseInt) 学习 map 和 parseInt 函数
查看>>
python的threading和multiprocessing模块初探
查看>>
蓝桥杯 前缀表达式
查看>>