1. 程式人生 > >Netty之ChannelOption的各種參數

Netty之ChannelOption的各種參數

live 地址 backlog all back 利用 ive option 套接字選項

  • ChannelOption.SO_BACKLOG, 1024

BACKLOG用於構造服務端套接字ServerSocket對象,標識當服務器請求處理線程全滿時,用於臨時存放已完成三次握手的請求的隊列的最大長度。如果未設置或所設置的值小於1,Java將使用默認值50。

  ChannelOption.SO_BACKLOG對應的是tcp/ip協議listen函數中的backlog參數,函數listen(int socketfd,int backlog)用來初始化服務端可連接隊列,

    服務端處理客戶端連接請求是順序處理的,所以同一時間只能處理一個客戶端連接,多個客戶端來的時候,服務端將不能處理的客戶端連接請求放在隊列中等待處理,backlog參數指定了隊列的大小

  • ChannelOption.SO_KEEPALIVE, true

是否啟用心跳保活機制。在雙方TCP套接字建立連接後(即都進入ESTABLISHED狀態)並且在兩個小時左右上層沒有任何數據傳輸的情況下,這套機制才會被激活。

  • ChannelOption.TCP_NODELAY, true

在TCP/IP協議中,無論發送多少數據,總是要在數據前面加上協議頭,同時,對方接收到數據,也需要發送ACK表示確認。為了盡可能的利用網絡帶寬,TCP總是希望盡可能的發送足夠大的數據。這裏就涉及到一個名為Nagle的算法,該算法的目的就是為了盡可能發送大塊數據,避免網絡中充斥著許多小數據塊。

TCP_NODELAY就是用於啟用或關於Nagle算法。如果要求高實時性,有數據發送時就馬上發送,就將該選項設置為true關閉Nagle算法;如果要減少發送次數減少網絡交互,就設置為false等累積一定大小後再發送。默認為false。

ChannelOption.TCP_NODELAY參數對應於套接字選項中的TCP_NODELAY,該參數的使用與Nagle算法有關

    Nagle算法是將小的數據包組裝為更大的幀然後進行發送,而不是輸入一次發送一次,因此在數據包不足的時候會等待其他數據的到了,組裝成大的數據包進行發送,雖然該方式有效提高網絡的有效

    負載,但是卻造成了延時,而該參數的作用就是禁止使用Nagle算法,使用於小數據即時傳輸,於TCP_NODELAY相對應的是TCP_CORK,該選項是需要等到發送的數據量最大的時候,一次性發送

    數據,適用於文件傳輸。

4.ChannelOption.SO_REUSEADDR, true

SO_REUSEADDR允許啟動一個監聽服務器並捆綁其眾所周知端口,即使以前建立的將此端口用做他們的本地端口的連接仍存在。這通常是重啟監聽服務器時出現,若不設置此選項,則bind時將出錯。
SO_REUSEADDR允許在同一端口上啟動同一服務器的多個實例,只要每個實例捆綁一個不同的本地IP地址即可。對於TCP,我們根本不可能啟動捆綁相同IP地址和相同端口號的多個服務器。
SO_REUSEADDR允許單個進程捆綁同一端口到多個套接口上,只要每個捆綁指定不同的本地IP地址即可。這一般不用於TCP服務器。
SO_REUSEADDR允許完全重復的捆綁:當一個IP地址和端口綁定到某個套接口上時,還允許此IP地址和端口捆綁到另一個套接口上。一般來說,這個特性僅在支持多播的系統上才有,而且只對UDP套接口而言(TCP不支持多播)

5.ChannelOption.SO_RCVBUF AND ChannelOption.SO_SNDBUF
定義接收或者傳輸的系統緩沖區buf的大小,

6.ChannelOption.ALLOCATOR
Netty4使用對象池,重用緩沖區
bootstrap.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);
bootstrap.childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);

Netty之ChannelOption的各種參數