標籤:使用者 儲存 delay channel 狀態 參考 模糊 發送資料 活動
一、概述
最近在寫一個分布式服務架構,打算用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真的很強大,也很好用,推薦大家學習一下。
Netty之ChannelOption