Netty通信網絡參數配置


Netty服務端/客戶端網絡通信過程中常用的參數:

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算法

 

 

Channel配置參數

(1).通用參數
CONNECT_TIMEOUT_MILLIS
  Netty參數,連接超時毫秒數,默認值30000毫秒即30秒。
MAX_MESSAGES_PER_READ
  Netty參數,一次Loop讀取的最大消息數,對於ServerChannel或者NioByteChannel,默認值為16,其他Channel默認值為1。默認值這樣設置,是因為:ServerChannel需要接受足夠多的連接,保證大吞吐量,NioByteChannel可以減少不必要的系統調用select。
WRITE_SPIN_COUNT
  Netty參數,一個Loop寫操作執行的最大次數,默認值為16。也就是說,對於大數據量的寫操作至多進行16次,如果16次仍沒有全部寫完數據,此時會提交一個新的寫任務給EventLoop,任務將在下次調度繼續執行。這樣,其他的寫請求才能被響應不會因為單個大數據量寫請求而耽誤。
ALLOCATOR
  Netty參數,ByteBuf的分配器,默認值為ByteBufAllocator.DEFAULT,4.0版本為UnpooledByteBufAllocator,4.1版本為PooledByteBufAllocator。該值也可以使用系統參數io.netty.allocator.type配置,使用字符串值:"unpooled","pooled"。
RCVBUF_ALLOCATOR
  Netty參數,用於Channel分配接受Buffer的分配器,默認值為AdaptiveRecvByteBufAllocator.DEFAULT,是一個自適應的接受緩沖區分配器,能根據接受到的數據自動調節大小。可選值為FixedRecvByteBufAllocator,固定大小的接受緩沖區分配器。
AUTO_READ
  Netty參數,自動讀取,默認值為True。Netty只在必要的時候才設置關心相應的I/O事件。對於讀操作,需要調用channel.read()設置關心的I/O事件為OP_READ,這樣若有數據到達才能讀取以供用戶處理。該值為True時,每次讀操作完畢后會自動調用channel.read(),從而有數據到達便能讀取;否則,需要用戶手動調用channel.read()。需要注意的是:當調用config.setAutoRead(boolean)方法時,如果狀態由false變為true,將會調用channel.read()方法讀取數據;由true變為false,將調用config.autoReadCleared()方法終止數據讀取。
WRITE_BUFFER_HIGH_WATER_MARK
  Netty參數,寫高水位標記,默認值64KB。如果Netty的寫緩沖區中的字節超過該值,Channel的isWritable()返回False。
WRITE_BUFFER_LOW_WATER_MARK
  Netty參數,寫低水位標記,默認值32KB。當Netty的寫緩沖區中的字節超過高水位之后若下降到低水位,則Channel的isWritable()返回True。寫高低水位標記使用戶可以控制寫入數據速度,從而實現流量控制。推薦做法是:每次調用channl.write(msg)方法首先調用channel.isWritable()判斷是否可寫。
MESSAGE_SIZE_ESTIMATOR
  Netty參數,消息大小估算器,默認為DefaultMessageSizeEstimator.DEFAULT。估算ByteBuf、ByteBufHolder和FileRegion的大小,其中ByteBuf和ByteBufHolder為實際大小,FileRegion估算值為0。該值估算的字節數在計算水位時使用,FileRegion為0可知FileRegion不影響高低水位。
SINGLE_EVENTEXECUTOR_PER_GROUP
  Netty參數,單線程執行ChannelPipeline中的事件,默認值為True。該值控制執行ChannelPipeline中執行ChannelHandler的線程。如果為Trye,整個pipeline由一個線程執行,這樣不需要進行線程切換以及線程同步,是Netty4的推薦做法;如果為False,ChannelHandler中的處理過程會由Group中的不同線程執行。
(2).SocketChannel參數
SO_RCVBUF
  Socket參數,TCP數據接收緩沖區大小。該緩沖區即TCP接收滑動窗口,linux操作系統可使用命令:cat /proc/sys/net/ipv4/tcp_rmem查詢其大小。一般情況下,該值可由用戶在任意時刻設置,但當設置值超過64KB時,需要在連接到遠端之前設置。
SO_SNDBUF
  Socket參數,TCP數據發送緩沖區大小。該緩沖區即TCP發送滑動窗口,linux操作系統可使用命令:cat /proc/sys/net/ipv4/tcp_smem查詢其大小。
TCP_NODELAY
  TCP參數,立即發送數據,默認值為Ture(Netty默認為True而操作系統默認為False)。該值設置Nagle算法的啟用,改算法將小的碎片數據連接成更大的報文來最小化所發送的報文的數量,如果需要發送一些較小的報文,則需要禁用該算法。Netty默認禁用該算法,從而最小化報文傳輸延時。
SO_KEEPALIVE
  Socket參數,連接保活,默認值為False。啟用該功能時,TCP會主動探測空閑連接的有效性。可以將此功能視為TCP的心跳機制,需要注意的是:默認的心跳間隔是7200s即2小時。Netty默認關閉該功能。
SO_REUSEADDR
  Socket參數,地址復用,默認值False。有四種情況可以使用:(1).當有一個有相同本地地址和端口的socket1處於TIME_WAIT狀態時,而你希望啟動的程序的socket2要占用該地址和端口,比如重啟服務且保持先前端口。(2).有多塊網卡或用IP Alias技術的機器在同一端口啟動多個進程,但每個進程綁定的本地IP地址不能相同。(3).單個進程綁定相同的端口到多個socket上,但每個socket綁定的ip地址不同。(4).完全相同的地址和端口的重復綁定。但這只用於UDP的多播,不用於TCP。
SO_LINGER
  Socket參數,關閉Socket的延遲時間,默認值為-1,表示禁用該功能。-1表示socket.close()方法立即返回,但OS底層會將發送緩沖區全部發送到對端。0表示socket.close()方法立即返回,OS放棄發送緩沖區的數據直接向對端發送RST包,對端收到復位錯誤。非0整數值表示調用socket.close()方法的線程被阻塞直到延遲時間到或發送緩沖區中的數據發送完畢,若超時,則對端會收到復位錯誤。
IP_TOS
  IP參數,設置IP頭部的Type-of-Service字段,用於描述IP包的優先級和QoS選項。
ALLOW_HALF_CLOSURE
  Netty參數,一個連接的遠端關閉時本地端是否關閉,默認值為False。值為False時,連接自動關閉;為True時,觸發ChannelInboundHandler的userEventTriggered()方法,事件為ChannelInputShutdownEvent。
(3).ServerSocketChannel參數
SO_RCVBUF
  已說明,需要注意的是:當設置值超過64KB時,需要在綁定到本地端口前設置。該值設置的是由ServerSocketChannel使用accept接受的SocketChannel的接收緩沖區。
SO_REUSEADDR
  已說明
SO_BACKLOG
  Socket參數,服務端接受連接的隊列長度,如果隊列已滿,客戶端連接將被拒絕。默認值,Windows為200,其他為128。
(4).DatagramChannel參數
SO_BROADCAST
  Socket參數,設置廣播模式。
SO_RCVBUF
  已說明
SO_SNDBUF
  已說明
SO_REUSEADDR
  已說明
IP_MULTICAST_LOOP_DISABLED
  對應IP參數IP_MULTICAST_LOOP,設置本地回環接口的多播功能。由於IP_MULTICAST_LOOP返回True表示關閉,所以Netty加上后綴_DISABLED防止歧義。
IP_MULTICAST_ADDR
  對應IP參數IP_MULTICAST_IF,設置對應地址的網卡為多播模式。
IP_MULTICAST_IF
  對應IP參數IP_MULTICAST_IF2,同上但支持IPV6。
IP_MULTICAST_TTL
  IP參數,多播數據報的time-to-live即存活跳數。
IP_TOS
  已說明
DATAGRAM_CHANNEL_ACTIVE_ON_REGISTRATION
  Netty參數,DatagramChannel注冊的EventLoop即表示已激活。

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM