1. 程式人生 > >ChannelOption類中的各個屬性的定義

ChannelOption類中的各個屬性的定義

ChannelOption類中的各個屬性的定義

1 ALLOCATOR  Netty適用物件池,重用緩衝區
2 RCVBUF_ALLOCATOR  Netty引數,用於Channel分配接受Buffer的分配器,預設值為AdaptiveRecvByteBufAllocator.DEFAULT,是一個自適應的接受緩衝區分配器,能根據接受到的資料自動調節大小。可選值為FixedRecvByteBufAllocator,固定大小的接受緩衝區分配器。
3 MESSAGE_SIZE_ESTIMATOR Netty引數,訊息大小估算器,預設為DefaultMessageSizeEstimator.DEFAULT。估算ByteBuf、ByteBufHolder和FileRegion的大小,其中ByteBuf和ByteBufHolder為實際大小,FileRegion估算值為0。該值估算的位元組數在計算水位時使用,FileRegion為0可知FileRegion不影響高低水位。
4 CONNECT_TIMEOUT_MILLIS  Netty引數,連線超時毫秒數,預設值30000毫秒即30秒。
5 MAX_MESSAGES_PER_READ Netty引數,一次Loop讀取的最大訊息數,對於ServerChannel或者NioByteChannel,預設值為16,其他Channel預設值為1。預設值這樣設定,是因為:ServerChannel需要接受足夠多的連線,保證大吞吐量,NioByteChannel可以減少不必要的系統呼叫select。
6 WRITE_SPIN_COUNT Netty引數,一個Loop寫操作執行的最大次數,預設值為16。也就是說,對於大資料量的寫操作至多進行16次,如果16次仍沒有全部寫完資料,此時會提交一個新的寫任務給EventLoop,任務將在下次排程繼續執行。這樣,其他的寫請求才能被響應不會因為單個大資料量寫請求而耽誤。
7 WRITE_BUFFER_HIGH_WATER_MARK Netty引數,寫高水位標記,預設值64KB。如果Netty的寫緩衝區中的位元組超過該值,Channel的isWritable()返回False。、
8 WRITE_BUFFER_LOW_WATER_MARK Netty引數,寫低水位標記,預設值32KB。當Netty的寫緩衝區中的位元組超過高水位之後若下降到低水位,則Channel的isWritable()返回True。寫高低水位標記使使用者可以控制寫入資料速度,從而實現流量控制。推薦做法是:每次呼叫channl.write(msg)方法首先呼叫channel.isWritable()判斷是否可寫。
9 ALLOW_HALF_CLOSURE  
10 AUTO_READ Netty引數,一個連線的遠端關閉時本地端是否關閉,預設值為False。值為False時,連線自動關閉;為True時,觸發ChannelInboundHandler的userEventTriggered()方法,事件為ChannelInputShutdownEvent。
11 SO_BROADCAST Socket引數,設定廣播模式。
12 SO_KEEPALIVE Socket引數,連線保活,預設值為False。啟用該功能時,TCP會主動探測空閒連線的有效性。可以將此功能視為TCP的心跳機制,需要注意的是:預設的心跳間隔是7200s即2小時。Netty預設關閉該功能。
13 SO_SNDBUF  
14 SO_RCVBUF ChannelOption.SO_SNDBUF引數對應於套接字選項中的SO_SNDBUF,ChannelOption.SO_RCVBUF引數對應於套接字選項中的SO_RCVBUF這兩個引數用於操作接收緩衝區和傳送緩衝區
15 SO_REUSEADDR ChanneOption.SO_REUSEADDR對應於套接字選項中的SO_REUSEADDR,這個引數表示允許重複使用本地地址和埠,

比如,某個伺服器程序佔用了TCP的80埠進行監聽,此時再次監聽該埠就會返回錯誤,使用該引數就可以解決問題,該引數允許共用該埠,這個在伺服器程式中比較常使用,比如某個程序非正常退出,該程式佔用的埠可能要被佔用一段時間才能允許其他程序使用,而且程式死掉以後,核心一需要一定的時間才能夠釋放此埠,不設定SO_REUSEADDR

16 SO_LINGER

 Netty對底層Socket引數的簡單封裝,關閉Socket的延遲時間,預設值為-1,表示禁用該功能。-1以及所有<0的數表示socket.close()方法立即返回,但OS底層會將傳送緩衝區全部發送到對端。0表示socket.close()方法立即返回,OS放棄傳送緩衝區的資料直接向對端傳送RST包,對端收到復位錯誤。非0整數值表示呼叫socket.close()方法的執行緒被阻塞直到延遲時間到或傳送緩衝區中的資料傳送完畢,若超時,則對端會收到復位錯誤。

17 SO_BACKLOG Socket引數,服務端接受連線的佇列長度,如果佇列已滿,客戶端連線將被拒絕。預設值,Windows為200,其他為128。
18 SO_TIMEOUT 這個引數設定的是HTTP連線成功後,等待讀取資料或者寫資料的最大超時時間,單位為毫秒。如果設定為0,則表示永遠不會超時
19 IP_TOS IP引數,設定IP頭部的Type-of-Service欄位,用於描述IP包的優先順序和QoS選項。
20 IP_MULTICAST_ADDR

對應IP引數IP_MULTICAST_IF,設定對應地址的網絡卡為多播模式。

21 IP_MULTICAST_IF 對應IP引數IP_MULTICAST_IF2,同上但支援IPV6。
22 IP_MULTICAST_TTL IP引數,多播資料報的time-to-live即存活跳數。
23 IP_MULTICAST_LOOP_DISABLED 對應IP引數IP_MULTICAST_LOOP,設定本地迴環介面的多播功能。由於IP_MULTICAST_LOOP返回True表示關閉,所以Netty加上字尾_DISABLED防止歧義。
24 TCP_NODELAY TCP引數,立即傳送資料,預設值為Ture(Netty預設為True而作業系統預設為False)。該值設定Nagle演算法的啟用,改演算法將小的碎片資料連線成更大的報文來最小化所傳送的報文的數量,如果需要傳送一些較小的報文,則需要禁用該演算法。Netty預設禁用該演算法,從而最小化報文傳輸延時