Netty多线程配置机制

来源:互联网 发布:爱乃娜美 知乎 编辑:程序博客网 时间:2024/05/18 04:00

本文主要是对前一节(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

publicstaticvoid 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)));

原创粉丝点击