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

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



相关文章
|
开发者
整合的实现 | 学习笔记
快速学习整合的实现.
整合的实现 | 学习笔记
|
开发工具 Android开发 iOS开发
快速开始|学习笔记
快速学习快速开始
81 0
快速开始|学习笔记
|
开发工具
超详细的vimtutor学习笔记(上)
第一讲 编辑 1.1 移动光标 使用 h、j、k、l 键可以使光标实现左、下、上、右的移动。 也可以使用 ↑ ↓ ← → 进行上下左右的移动。
96 0
|
数据可视化 开发工具
超详细的vimtutor学习笔记(下)
第一讲 编辑 1.1 移动光标 使用 h、j、k、l 键可以使光标实现左、下、上、右的移动。 也可以使用 ↑ ↓ ← → 进行上下左右的移动。
68 0
|
机器学习/深度学习 算法 开发者
总结与回顾| 学习笔记
快速学习总结与回顾。
48 0
总结与回顾| 学习笔记
|
JSON 分布式计算 Hadoop
boolQuery | 学习笔记
快速学习 boolQuery
84 0
boolQuery | 学习笔记
|
存储 开发者 Python
练习3|学习笔记
快速学习练习3
71 0
|
架构师 开发者
高压线|学习笔记
快速学习高压线。
66 0
|
SQL 分布式计算 资源调度
StreamSQL|学习笔记
快速学习 StreamSQL
527 0
StreamSQL|学习笔记
|
Python
雨痕大神的《学习笔记系列》
雨痕大神的《学习笔记》可以在他的GitHub(https://github.com/qyuhen/book)下载,7000+的Star,足以证明认可度。 笔记系列陆陆续续在出版,已出版的有: 《Python 3学习笔记(上卷)》https://www.
3608 0