Grizzly NIO框架 理论篇 【3】

系统 1460 0

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.





Grizzly NIO框架 理论篇 【3】


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论