Netty多线程配置机制

技术点描述

本文主要是对前一节(Netty多线程机制)中的一些未提及的有用的类(可控制可配置类)做进一步解释说明,由于NIO包和OIO包中类比较多,此文仅介绍与多线程相关的且有对外开放接口的类进行分析。

NIO包结构如下图所示:

本文档主要讲解此包中的

DefaultNioDatagramChannelConfig类、

NioDatagramChannelConfig接口、

NioSocketChannelConfig接口

 

OIO包结构如下图所示:

此包中的类各种功能与NIO包中的类的功能类似,只是适用于old I/O,添加了多播模式的支持。

参考源码包

以下是对类的具体说明以及重要的常用的方法的分析

DefaultNioDatagramChannelConfig

此类是接口NioDatagramChannelConfig的实现类,具体的使用方法参见3.2.NioDatagramChannelConfig接口分析

NioDatagramChannelConfig

为新的I/O(new I/O) TCP/IP协议提供数据报管道配置,主要是配置DatagramChannel的参数的。以下是一些常用的参数:

 

 

 

 

 

Name

Associated setter method

"writeBufferHighWaterMark"

默认 64 * 1024用法未知

"writeBufferLowWaterMark"

默认 32 * 1024用法未知

"writeSpinCount"

默认 16(重复写次数,用法未知

"broadcast"

true / false 多播模式(UDP适用)

"interface"

多播数据包的网络接口地址

"loopbackModeDisabled"

实际调用的是channel.setOption(StandardSocketOptions.IP_MULTICAST_LOOP, loopbackModeDisabled);仅针对JDK7+有效

"networkInterface"

实际调用的是channel.setOption(StandardSocketOptions.IP_MULTICAST_IF, networkInterface);仅针对JDK7+有效

"reuseAddress"

地址是否可复用(UDP socket address绑定时用到)

"receiveBufferSize"

数据包接收大小

"receiveBufferSizePredictor"

数据包接收大小:默认设置为FixedReceiveBufferSizePredictor(768),超过后丢弃

"receiveBufferSizePredictorFactory"

似乎与上面的功能相同,设置方式:new FixedReceiveBufferSizePredictorFactory(1024)

"sendBufferSize"

发送数据包大小

"timeToLive"

JDK7+版本有效

"trafficClass"

0<=tc<=255

bufferFactory"

用于创建ChannelBuffer的工厂,默认HeapChannelBufferFactory

"connectTimeoutMillis"

连接超时时间(毫秒)

"pipelineFactory"

仅适用于child channel 创建时有效

"keepAlive"

启用/禁用Nagle算法

"soLinger"

Socket关闭时的延迟时间(单位:秒)

"tcpNoDelay"

启用/禁用Nagle算法

 

 

 

NioSocketChannelConfig

具体配置查看3.2 NioDatagramChannelConfig

Demo实现
SocketSetver

public static void tcpServerStartUp() {

        TCPSERVER_BOOTSTRAP.setPipelineFactory(new TCPServerPipelineFactory(EXECUTION_UP_HANDLER,EXECUTION_DOWN_HANDLER));

//        TCPSERVER_BOOTSTRAP.setOption("child.tcpNoDelay", true);

//        TCPSERVER_BOOTSTRAP.setOption("child.keepAlive", true);

//        TCPSERVER_BOOTSTRAP.setOption("reuseAddress", true);

//        LOGGER.info("SERVER_NAME:"+Constants.SERVER_NAME);

//        LOGGER.info("TCPSERVER_PORT:"+Constants.TCPSERVER_PORT);

//        TCPSERVER_BOOTSTRAP.bind(new InetSocketAddress(Constants.SERVER_NAME,Constants.TCPSERVER_PORT));

        TCPSERVER_BOOTSTRAP.setOptions(Constants.CHANNEL_CONFIGER_MAP);

        TCPSERVER_BOOTSTRAP.bind();

        LOGGER.info("TCP服务已启动....");

Constants

 

CHANNEL_CONFIGER_MAP.put("writeBufferHighWaterMark", 64*1024);

        CHANNEL_CONFIGER_MAP.put("writeBufferLowWaterMark", 32*1024);

        CHANNEL_CONFIGER_MAP.put("writeSpinCount", 16);

        CHANNEL_CONFIGER_MAP.put("broadcast", true);

        CHANNEL_CONFIGER_MAP.put("interface", new InetSocketAddress(Constants.SERVER_NAME,Constants.TCPSERVER_PORT));

        CHANNEL_CONFIGER_MAP.put("loopbackModeDisabled", true);

        CHANNEL_CONFIGER_MAP.put("networkInterface", new InetSocketAddress(Constants.SERVER_NAME,Constants.TCPSERVER_PORT));

        CHANNEL_CONFIGER_MAP.put("localAddress", new InetSocketAddress(Constants.SERVER_NAME,Constants.TCPSERVER_PORT));

        CHANNEL_CONFIGER_MAP.put("reuseAddress", true);

        CHANNEL_CONFIGER_MAP.put("receiveBufferSize", 10000);

        CHANNEL_CONFIGER_MAP.put("receiveBufferSizePredictor", new FixedReceiveBufferSizePredictor(100000));

        CHANNEL_CONFIGER_MAP.put("receiveBufferSizePredictorFactory", new FixedReceiveBufferSizePredictorFactory(100000));

        CHANNEL_CONFIGER_MAP.put("sendBufferSize", 10000);

        CHANNEL_CONFIGER_MAP.put("timeToLive", 30);

        CHANNEL_CONFIGER_MAP.put("trafficClass", 100);

        CHANNEL_CONFIGER_MAP.put("bufferFactory", new HeapChannelBufferFactory());

        CHANNEL_CONFIGER_MAP.put("connectTimeoutMillis", 60000);

        CHANNEL_CONFIGER_MAP.put("pipelineFactory", new TCPServerPipelineFactory(new ExecutionHandler(

     new OrderedMemoryAwareThreadPoolExecutor(16, 1048576, 1048576),false,true), new ExecutionHandler(

     new OrderedDownstreamThreadPoolExecutor(16),true,false)));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值