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)));
- Netty多线程配置机制
- Netty多线程配置机制
- Netty多线程处理机制
- Netty多线程处理机制
- Netty多线程处理机制
- 多线程NIO模仿Netty
- Netty的超时机制
- Netty的超时机制
- Netty心跳机制
- 浅析 Netty心跳机制
- Netty日志机制笔记
- netty自定义心跳机制
- Netty学习(八)-Netty的心跳机制
- 源码研读-netty多线程模型
- netty环境配置
- netty开发环境配置
- netty 混淆配置proguard
- netty 配置启动服务器
- 实现一个函数,对一个正整数n,算得到1需要的最少操作次数:
- NetBeans的(默认)快捷键
- 在LinqToSql中如何应用Repository模式
- SSH整合下载资源说明
- PHP 执行系统外部命令 system() exec() passthru()
- Netty多线程配置机制
- 交大OJ 1235: 或运算
- 如何给安卓软件嵌入广告
- winphone 独立存储
- java enum深入解析
- web网站中的单例模式
- iOS extracts: Observing low-memory warnings
- 杭电1593-find a way to escape
- 13暑假集训#2 总结