Netty挖掘機(五)底層連接配置之ChannelOption

上一篇主要講了一個Netty的服務端程序的實現(xiàn)流程。

這次我們來講一下Netty的TCP連接的底層參數配置

ChannelOption套接字配置

Netty中關于套接字選項的設置,在io.netty.channel.ChannelOption這個類中。

參數 解釋
SO_BROADCAST 對應套接字層的套接字:SO_BROADCAST,將消息發(fā)送到廣播地址。
如果目標中指定的接口支持廣播數據包,則啟用此選項可讓應用程序發(fā)送廣播消息。
SO_KEEPALIVE 對應套接字層的套接字:SO_KEEPALIVE,保持連接。
在空閑套接字上發(fā)送探測,以驗證套接字是否仍處于活動狀態(tài)。
SO_SNDBUF 對應套接字層的套接字:SO_SNDBUF,設置發(fā)送緩沖區(qū)的大小。
SO_RCVBUF 對應套接字層的套接字:SO_RCVBUF,獲取接收緩沖區(qū)的大小。
SO_REUSEADDR 對應套接字層的套接字:SO_REUSEADDR,本地地址復用。
啟用此選項允許綁定已使用的本地地址。
SO_LINGER 對應套接字層的套接字:SO_LINGER,延遲關閉連接。
啟用此選項,在調用close時如果存在未發(fā)送的數據時,在close期間將阻止調用應用程序,直到數據被傳輸或連接超時。
SO_BACKLOG 對應TCP/IP協(xié)議中<font color=red>backlog</font>參數,<font color=red>backlog</font>即連接隊列,設置TCP中的連接隊列大小。如果隊列滿了,會發(fā)送一個ECONNREFUSED錯誤信息給C端,即“ Connection refused”。
SO_TIMEOUT 等待客戶連接的超時時間。
IP_TOS 對應套接字層的套接字:IP_TOS,在IP標頭中設置服務類型(TOS)和優(yōu)先級。
IP_MULTICAST_ADDR 對應IP層的套接字選項:IP_MULTICAST_IF,設置應發(fā)送多播數據報的傳出接口。
IP_MULTICAST_IF 對應IP層的套接字選項:IP_MULTICAST_IF2,設置應發(fā)送多播數據報的IPV6傳出接口。
IP_MULTICAST_TTL 對應IP層的套接字選項:IP_MULTICAST_TTL,在傳出的 多播數據報的IP頭中設置生存時間(TTL)。
IP_MULTICAST_LOOP_DISABLED 取消 指定應將 傳出的多播數據報的副本 回傳到發(fā)送主機,只要它是多播組的成員即可。
TCP_NODELAY 對應TCP層的套接字選項:TCP_NODELAY,指定TCP是否遵循<font color=#35b998>Nagle算法</font> 決定何時發(fā)送數據。Nagle算法代表通過減少必須發(fā)送包的個數來增加網絡軟件系統(tǒng)的效率。即盡可能發(fā)送大塊數據避免網絡中充斥著大量的小數據塊。如果要追求高實時性,需要設置關閉Nagle算法;如果需要追求減少網絡交互次數,則設置開啟Nagle算法。

ChannelOption通用配置

參數 解釋
ALLOCATOR ByteBuf的分配器,默認值為ByteBufAllocator.DEFAULT。
RCVBUF_ALLOCATOR 用于Channel分配接受Buffer的分配器,默認值為AdaptiveRecvByteBufAllocator.DEFAULT,是一個自適應的接受緩沖區(qū)分配器,能根據接受到的數據自動調節(jié)大小??蛇x值為FixedRecvByteBufAllocator,固定大小的接受緩沖區(qū)分配器。
MESSAGE_SIZE_ESTIMATOR 消息大小估算器,默認為DefaultMessageSizeEstimator.DEFAULT。估算ByteBuf、ByteBufHolder和FileRegion的大小,其中ByteBuf和ByteBufHolder為實際大小,F(xiàn)ileRegion估算值為0。該值估算的字節(jié)數在計算水位時使用,F(xiàn)ileRegion為0可知FileRegion不影響高低水位。
CONNECT_TIMEOUT_MILLIS 連接超時毫秒數,默認值30000毫秒即30秒。
WRITE_SPIN_COUNT 一個Loop寫操作執(zhí)行的最大次數,默認值為16。也就是說,對于大數據量的寫操作至多進行16次,如果16次仍沒有全部寫完數據,此時會提交一個新的寫任務給EventLoop,任務將在下次調度繼續(xù)執(zhí)行。這樣,其他的寫請求才能被響應不會因為單個大數據量寫請求而耽誤。
WRITE_BUFFER_WATER_MARK
ALLOW_HALF_CLOSURE 一個連接的遠端關閉時本地端是否關閉,默認值為False。值為False時,連接自動關閉;為True時,觸發(fā)ChannelInboundHandler的userEventTriggered()方法,事件為ChannelInputShutdownEvent。
AUTO_READ 自動讀取,默認值為True。Netty只在必要的時候才設置關心相應的I/O事件。對于讀操作,需要調用channel.read()設置關心的I/O事件為OP_READ,這樣若有數據到達才能讀取以供用戶處理。該值為True時,每次讀操作完畢后會自動調用channel.read(),從而有數據到達便能讀取;否則,需要用戶手動調用channel.read()。需要注意的是:當調用config.setAutoRead(boolean)方法時,如果狀態(tài)由false變?yōu)閠rue,將會調用channel.read()方法讀取數據;由true變?yōu)閒alse,將調用config.autoReadCleared()方法終止數據讀取。
AUTO_CLOSE
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據使用者...
    JasonShi6306421閱讀 1,342評論 0 1
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據使用者...
    保川閱讀 6,076評論 1 13
  • 文章首發(fā)于個人blog歡迎指正補充,可聯(lián)系lionsom_lin@qq.com原文地址:《網絡是怎樣連接的》閱讀整...
    Lucus_Linx閱讀 14,458評論 6 31
  • 套接字具有多種特性,這些特性可通過可選項更改,本篇文章將介紹更改套接字可選項的方法,并以此為基礎進一步觀察套接字內...
    Super超人閱讀 3,814評論 2 8
  • 運輸層協(xié)議概述 從通信和信息處理的角度看,運輸層向它上面的應用層提供通信服務,它屬于面向通信部分的最高層,同時也是...
    srtianxia閱讀 2,746評論 0 2

友情鏈接更多精彩內容