上一篇主要講了一個(gè)Netty的服務(wù)端程序的實(shí)現(xiàn)流程床佳。
這次我們來講一下Netty的TCP連接的底層參數(shù)配置
ChannelOption套接字配置
Netty中關(guān)于套接字選項(xiàng)的設(shè)置耐版,在
io.netty.channel.ChannelOption
這個(gè)類中。
參數(shù) | 解釋 |
---|---|
SO_BROADCAST | 對應(yīng)套接字層的套接字:SO_BROADCAST景殷,將消息發(fā)送到廣播地址脐瑰。 如果目標(biāo)中指定的接口支持廣播數(shù)據(jù)包省撑,則啟用此選項(xiàng)可讓應(yīng)用程序發(fā)送廣播消息匾荆。 |
SO_KEEPALIVE | 對應(yīng)套接字層的套接字:SO_KEEPALIVE,保持連接粒督。 在空閑套接字上發(fā)送探測陪竿,以驗(yàn)證套接字是否仍處于活動狀態(tài)。 |
SO_SNDBUF | 對應(yīng)套接字層的套接字:SO_SNDBUF屠橄,設(shè)置發(fā)送緩沖區(qū)的大小族跛。 |
SO_RCVBUF | 對應(yīng)套接字層的套接字:SO_RCVBUF,獲取接收緩沖區(qū)的大小锐墙。 |
SO_REUSEADDR | 對應(yīng)套接字層的套接字:SO_REUSEADDR礁哄,本地地址復(fù)用。 啟用此選項(xiàng)允許綁定已使用的本地地址溪北。 |
SO_LINGER | 對應(yīng)套接字層的套接字:SO_LINGER桐绒,延遲關(guān)閉連接。 啟用此選項(xiàng)之拨,在調(diào)用close時(shí)如果存在未發(fā)送的數(shù)據(jù)時(shí)茉继,在close期間將阻止調(diào)用應(yīng)用程序,直到數(shù)據(jù)被傳輸或連接超時(shí)蚀乔。 |
SO_BACKLOG | 對應(yīng)TCP/IP協(xié)議中<font color=red>backlog</font>參數(shù)烁竭,<font color=red>backlog</font>即連接隊(duì)列,設(shè)置TCP中的連接隊(duì)列大小吉挣。如果隊(duì)列滿了颖变,會發(fā)送一個(gè)ECONNREFUSED錯(cuò)誤信息給C端,即“ Connection refused”听想。 |
SO_TIMEOUT | 等待客戶連接的超時(shí)時(shí)間腥刹。 |
IP_TOS | 對應(yīng)套接字層的套接字:IP_TOS,在IP標(biāo)頭中設(shè)置服務(wù)類型(TOS)和優(yōu)先級汉买。 |
IP_MULTICAST_ADDR | 對應(yīng)IP層的套接字選項(xiàng):IP_MULTICAST_IF衔峰,設(shè)置應(yīng)發(fā)送多播數(shù)據(jù)報(bào)的傳出接口。 |
IP_MULTICAST_IF | 對應(yīng)IP層的套接字選項(xiàng):IP_MULTICAST_IF2蛙粘,設(shè)置應(yīng)發(fā)送多播數(shù)據(jù)報(bào)的IPV6傳出接口垫卤。 |
IP_MULTICAST_TTL | 對應(yīng)IP層的套接字選項(xiàng):IP_MULTICAST_TTL,在傳出的 多播數(shù)據(jù)報(bào)的IP頭中設(shè)置生存時(shí)間(TTL)出牧。 |
IP_MULTICAST_LOOP_DISABLED | 取消 指定應(yīng)將 傳出的多播數(shù)據(jù)報(bào)的副本 回傳到發(fā)送主機(jī)穴肘,只要它是多播組的成員即可。 |
TCP_NODELAY | 對應(yīng)TCP層的套接字選項(xiàng):TCP_NODELAY舔痕,指定TCP是否遵循<font color=#35b998>Nagle算法</font> 決定何時(shí)發(fā)送數(shù)據(jù)评抚。Nagle算法代表通過減少必須發(fā)送包的個(gè)數(shù)來增加網(wǎng)絡(luò)軟件系統(tǒng)的效率豹缀。即盡可能發(fā)送大塊數(shù)據(jù)避免網(wǎng)絡(luò)中充斥著大量的小數(shù)據(jù)塊。如果要追求高實(shí)時(shí)性慨代,需要設(shè)置關(guān)閉Nagle算法邢笙;如果需要追求減少網(wǎng)絡(luò)交互次數(shù),則設(shè)置開啟Nagle算法侍匙。 |
ChannelOption通用配置
參數(shù) | 解釋 |
---|---|
ALLOCATOR | ByteBuf的分配器氮惯,默認(rèn)值為ByteBufAllocator.DEFAULT。 |
RCVBUF_ALLOCATOR | 用于Channel分配接受Buffer的分配器想暗,默認(rèn)值為AdaptiveRecvByteBufAllocator.DEFAULT妇汗,是一個(gè)自適應(yīng)的接受緩沖區(qū)分配器,能根據(jù)接受到的數(shù)據(jù)自動調(diào)節(jié)大小说莫⊙罴可選值為FixedRecvByteBufAllocator,固定大小的接受緩沖區(qū)分配器唬滑。 |
MESSAGE_SIZE_ESTIMATOR | 消息大小估算器告唆,默認(rèn)為DefaultMessageSizeEstimator.DEFAULT棺弊。估算ByteBuf晶密、ByteBufHolder和FileRegion的大小,其中ByteBuf和ByteBufHolder為實(shí)際大小模她,F(xiàn)ileRegion估算值為0稻艰。該值估算的字節(jié)數(shù)在計(jì)算水位時(shí)使用,F(xiàn)ileRegion為0可知FileRegion不影響高低水位侈净。 |
CONNECT_TIMEOUT_MILLIS | 連接超時(shí)毫秒數(shù)尊勿,默認(rèn)值30000毫秒即30秒。 |
WRITE_SPIN_COUNT | 一個(gè)Loop寫操作執(zhí)行的最大次數(shù)畜侦,默認(rèn)值為16元扔。也就是說,對于大數(shù)據(jù)量的寫操作至多進(jìn)行16次旋膳,如果16次仍沒有全部寫完數(shù)據(jù)澎语,此時(shí)會提交一個(gè)新的寫任務(wù)給EventLoop,任務(wù)將在下次調(diào)度繼續(xù)執(zhí)行验懊。這樣擅羞,其他的寫請求才能被響應(yīng)不會因?yàn)閱蝹€(gè)大數(shù)據(jù)量寫請求而耽誤。 |
WRITE_BUFFER_WATER_MARK | |
ALLOW_HALF_CLOSURE | 一個(gè)連接的遠(yuǎn)端關(guān)閉時(shí)本地端是否關(guān)閉义图,默認(rèn)值為False减俏。值為False時(shí),連接自動關(guān)閉碱工;為True時(shí)娃承,觸發(fā)ChannelInboundHandler的userEventTriggered()方法奏夫,事件為ChannelInputShutdownEvent。 |
AUTO_READ | 自動讀取草慧,默認(rèn)值為True桶蛔。Netty只在必要的時(shí)候才設(shè)置關(guān)心相應(yīng)的I/O事件。對于讀操作漫谷,需要調(diào)用channel.read()設(shè)置關(guān)心的I/O事件為OP_READ仔雷,這樣若有數(shù)據(jù)到達(dá)才能讀取以供用戶處理。該值為True時(shí)舔示,每次讀操作完畢后會自動調(diào)用channel.read()碟婆,從而有數(shù)據(jù)到達(dá)便能讀取惕稻;否則竖共,需要用戶手動調(diào)用channel.read()。需要注意的是:當(dāng)調(diào)用config.setAutoRead(boolean)方法時(shí)俺祠,如果狀態(tài)由false變?yōu)閠rue公给,將會調(diào)用channel.read()方法讀取數(shù)據(jù);由true變?yōu)閒alse蜘渣,將調(diào)用config.autoReadCleared()方法終止數(shù)據(jù)讀取淌铐。 |
AUTO_CLOSE |