Netty之ChannelOption


一、概述

  最近在寫一個分布式服務框架,打算用netty框架做底層網絡通信,關於netty的學習可以參考如下資料:

    http://blog.csdn.net/column/details/enjoynetty.html

    李林鋒的《Netty權威指南》

二、詳情

  在用netty作為底層網絡通信的時候關於ChannelOption的參數讓我一直模糊不清楚,於是去看一下linux網絡編程,發現ChannelOption的各種屬性在套接字選項中都有對應

  下面簡單的總結一下ChannelOption的含義已及使用的場景

  1、ChannelOption.SO_BACKLOG

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

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

  2、ChannelOption.SO_REUSEADDR

    ChanneOption.SO_REUSEADDR對應於套接字選項中的SO_REUSEADDR,這個參數表示允許重復使用本地地址和端口,

    比如,某個服務器進程占用了TCP的80端口進行監聽,此時再次監聽該端口就會返回錯誤,使用該參數就可以解決問題,該參數允許共用該端口,這個在服務器程序中比較常使用,

    比如某個進程非正常退出,該程序占用的端口可能要被占用一段時間才能允許其他進程使用,而且程序死掉以后,內核一需要一定的時間才能夠釋放此端口,不設置SO_REUSEADDR

    就無法正常使用該端口。

  3、ChannelOption.SO_KEEPALIVE

    Channeloption.SO_KEEPALIVE參數對應於套接字選項中的SO_KEEPALIVE,該參數用於設置TCP連接,當設置該選項以后,連接會測試鏈接的狀態,這個選項用於可能長時間沒有數據交流的

    連接。當設置該選項以后,如果在兩小時內沒有數據的通信時,TCP會自動發送一個活動探測數據報文。

  4、ChannelOption.SO_SNDBUF和ChannelOption.SO_RCVBUF

    ChannelOption.SO_SNDBUF參數對應於套接字選項中的SO_SNDBUF,ChannelOption.SO_RCVBUF參數對應於套接字選項中的SO_RCVBUF這兩個參數用於操作接收緩沖區和發送緩沖區

    的大小,接收緩沖區用於保存網絡協議站內收到的數據,直到應用程序讀取成功,發送緩沖區用於保存發送數據,直到發送成功。

  5、ChannelOption.SO_LINGER

    ChannelOption.SO_LINGER參數對應於套接字選項中的SO_LINGER,Linux內核默認的處理方式是當用戶調用close()方法的時候,函數返回,在可能的情況下,盡量發送數據,不一定保證

    會發生剩余的數據,造成了數據的不確定性,使用SO_LINGER可以阻塞close()的調用時間,直到數據完全發送

  6、ChannelOption.TCP_NODELAY

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

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

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

    數據,適用於文件傳輸。

三、總結

  最近使用netty感覺netty真的很強大,也很好用,推薦大家學習一下。


免責聲明!

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



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