Grizzly NIO框架 理论篇 【3】

Transport Configuration (Transport 的 配置)

我们先从一个简单的创建开始:

  1. final TCPNIOTransportBuilder builder = TCPNIOTransportBuilder.newInstance();
  2. final TCPNIOTransport transport = builder.build();

这样就创建了一个Transport,如果我们想建立服务端,接下来就是绑定端口和开启服务:

  1. final TCPNIOTransportBuilder builder = TCPNIOTransportBuilder.newInstance();
  2. final TCPNIOTransport transport = builder.build();
  3. try {
  4. // Bind server socket and start transport
  5. transport.bind(12345);
  6. transport.start();
  7. System.out.println("Press <enter> to exit...");
  8. System.in.read();
  9. } catch(Exception e){
  10. e.printStackTrace();
  11. }

Systen.in.read()的作用还是不让Main线程结束,因为transport创建的Selector线程或者Worker都是虚拟线程(虚拟线程什么特点网上有资料)。

按如上所述就开启了端口为12345的一个服务端了。

如果我们需要创建客户端,那么可以通过transport建立到某个地址+端口的连接:

  1. final TCPNIOTransportBuilder builder = TCPNIOTransportBuilder.newInstance();
  2. final TCPNIOTransport transport = builder.build();
  3. Future<Connection> fc = transport.connect("127.0.0.1", 12345);
  4. Connection conn = fc.get();
  5. conn.write(message);

其中message的格式根据自定义的Filter而变化,如果是底层的,message就是一个Buffer。

接下来还是主要看下我常用的配置:

IOStrategy 这个之前有讲解基本有如下几个:

  1. builder.setIOStrategy(WorkerThreadIOStrategy.getInstance());
  2. builder.setIOStrategy(SameThreadIOStrategy.getInstance());
  3. builder.setIOStrategy(SimpleDynamicNIOStrategy.getInstance());
  4. builder.setIOStrategy(LeaderFollowerNIOStrategy.getInstance());

memoryManager 这个就是内存管理器:有Heap和ByteBuffer两种。
processor

  1. FilterChainBuilder filterChainBuilder = FilterChainBuilder.stateless();
  2. builder.setProcessor(filterChainBuilder.build());

这个一般设置FilterChain,我们可以在FilterChain里面添加自己的滤镜,用于处理消息

readBufferSize 读数据流的分配内存大小
writeBuffersSize 写数据流的内存分配大小,一般可以根据工程而配置。
 

其他属性都是用默认的,所以如果有了解可以查看官方英文的文档。

Thread Pool Configuration

好了,基本使用已经学会,那么我们看看几个参数的作用:

  1. final TCPNIOTransportBuilder builder = TCPNIOTransportBuilder.newInstance();
  2. final ThreadPoolConfig config = builder.getWorkerThreadPoolConfig();
  3. config.setCorePoolSize(5).setMaxPoolSize(5).setQueueLimit(-1);
  4. final TCPNIOTransport transport = builder.build();
queue 任务队列
queueLimit 队列最大容纳的数量
threadFactory 线程工厂,用于创建Worker线程或其他线程。。。
poolName 线程池的名称
priority The priority to be assigned to each thread. This will override any priority assigned by the specified ThreadFactory.
corePoolSize 初始线程数
maxPoolSize 最大线程数,-1表示无限大
keepAliveTime The maximum time a thread may stay idle and wait for a new task to execute before it will be released. Custom time units can be used.
transactionTimeout The maximum time a thread may be allowed to run a single task before interrupt signal will be sent. Custom time units can be used.

来自为知笔记(Wiz)

时间: 2024-11-06 19:25:54

Grizzly NIO框架 理论篇 【3】的相关文章

Grizzly NIO框架 理论篇 【2】

Transports and Connections 这两个东西,是灰熊框架的核心结构~Transports工具包含有TCP或UDP的协议,合并各种组件资源(Thread-Pool 线程池.Memory Manager 内存管理器等等. 从结构来说,没什么东西,主要还是使用上 1.使用Future模式建立Connection Future<Connection> clientConnectionFuture = tcpNioTransport.connect("grizzly.jav

基于ASP.Net的热插拨Web框架——理论篇

园子里已经有网友谈论过基于.Net的热插拨Web框架实现,我的方法与之不同.这里记录下来,有兴趣的网友可以看看. 一 设计该框架的缘由和难处 设计这个框架的原因是我想要构建一个类似wordpresss这种能够方便启用.禁用插件和主题的Web应用.Wordpress是一个广受欢迎的博客应用.通过使用wordpress,一个新手也能够快速的搭建一个博客或者网站,用上各种各样的自己需要的插件——从seo.社交媒体账号登陆到后台管理应用插件,再配上好看的主题,只需要几个步骤,你就能够拥有一个时尚并且紧跟

【SSH2(理论篇)】--Struts2配置详解

上篇博客讨论了SSH2框架模型,在开发过程中发现SSH2的开发模型其实类似于经典的三层模式,在每一层中分别添加了不同的框架,显示层使用的是Struts2进行配置的,业务逻辑层使用的是Spring配置,数据持久层则采用的是Hibernate,开发模式简单易懂,接下来将会分别从三层着手讨论每一层的运行内容. 一.Struts体系简介 struts,是Apache软件基金会(ASF)赞助的一个开源项目,它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-V

三层学习------理论篇

学校放假了,刚回家的孩子就像个客人被父母招待着.在放假的前几天里,你尽管开口,想吃啥爸妈都会满足你,不过好景可不长!在我家,厨房是老妈的地盘,买菜.做饭.洗碗刷锅,一个人全包了.而在饭店吃饭呢,吃饭的人多了,顾客点的饭菜种类各不相同.前前后后,一个人忙乎,哪里顾得过来,所以饭店就有了分工.前台服务员负责将顾客点的菜上报给厨师和:厨师根据上报的菜单做菜:采购员负责柴米油盐酱醋茶.这样,大家各司其职,井井有条. 我们在家中吃饭比较简单,没有具体的分工.饭店就是一个复杂庞大的系统了,需要合理规划,分工

Java异步NIO框架Netty实现高性能高并发

1. 背景 1.1. 惊人的性能数据 近期一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用.相比于传统基于Java序列化+BIO(同步堵塞IO)的通信框架.性能提升了8倍多. 其实,我对这个数据并不感到吃惊,依据我5年多的NIO编程经验.通过选择合适的NIO框架,加上高性能的压缩二进制编解码技术,精心的设计Reactor线程模型,达到上述性能指标是全然有可能的. 以下我们就一起来看下Ne

【原创】NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示

申明:本文由作者基于日常实践整理,希望对初次接触MINA.Netty的人有所启发.如需与作者交流,见文签名,互相学习. 学习交流 更多学习资料:点此进入 推荐 移动端即时通讯交流: 215891622 推荐 前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty4(Netty5已经被取消开发了:详见此文). 本文将演示的是一个基于Netty4的UDP服

【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战

概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty4(Netty5已经被取消开发了:详见此文). 本文中,服务端将分别用MINA2和Netty4进行实现,但在你实际的项目中服务端实现只需选其一就行了.本文中的Demo同时

【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战

前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同时用MINA2和Netty4分别实现服务端的目的,是因为很多人都在纠结到底是用MINA还是Netty来实现高并发的Java网络通信服务端,在此干脆两个都实现了,就看你怎么选择了,够吊吧. NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,M

疯狂Java学习笔记(75)-----------NIO.2第一篇

Java 7引入了NIO.2,NIO.2是继承自NIO框架,并增加了新的功能(例如:处理软链接和硬链接的功能).这篇帖子包括三个部分,我将使用NIO.2的一些示例,由此向大家演示NIO.2的基本使用方法. 下一篇地址http://blog.csdn.net/u011225629/article/details/46386599 文件拷贝 Q:怎样拷贝一个文件? A:你可以使用java.nio.file.Files类的public static Path copy(Path source, Pat