go語(yǔ)言怎么關(guān)閉tcp,谷歌放棄go語(yǔ)言

【golang】高并發(fā)下TCP常見問題解決方案

首先,看一下TCP握手簡(jiǎn)單描繪過程:

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的太白網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

其握手過程原理,就不必說了,有很多詳細(xì)文章進(jìn)行敘述,本文只關(guān)注研究重點(diǎn)。

在第三次握手過程中,如果服務(wù)器收到ACK,就會(huì)與客戶端建立連接,此時(shí)內(nèi)核會(huì)把連接從半連接隊(duì)列移除,然后創(chuàng)建新的連接,并將其添加到全連接隊(duì)列,等待進(jìn)程調(diào)用。

如果服務(wù)器繁忙,來不及調(diào)用連接導(dǎo)致全連接隊(duì)列溢出,服務(wù)器就會(huì)放棄當(dāng)前握手連接,發(fā)送RST給客戶端,即connection reset by peer。

在linux平臺(tái)上,客戶端在進(jìn)行高并發(fā)TCP連接處理時(shí),最高并發(fā)數(shù)量都要受系統(tǒng)對(duì)用戶單一進(jìn)程同時(shí)打開文件數(shù)量的限制(這是因?yàn)橄到y(tǒng)每個(gè)TCP都是SOCKET句柄,每個(gè)soker句柄都是一個(gè)文件),當(dāng)打開連接超過限制,就會(huì)出現(xiàn)too many open files。

使用下指令查看最大句柄數(shù)量:

增加句柄解決方案

如何關(guān)閉一個(gè)TCP連接

從TCP協(xié)議角度來看,一個(gè)已建立的TCP連接有兩種關(guān)閉方式,一種是正常關(guān)閉,即四次揮手關(guān)閉連接;還有一種則是異常關(guān)閉,我們通常稱之為連接重置(RESET)。

首先說一下正常關(guān)閉時(shí)四次揮手的狀態(tài)變遷,關(guān)閉連接的主動(dòng)方狀態(tài)變遷是FIN_WAIT_1-FIN_WAIT_2-TIME_WAIT,而關(guān)閉連接的被動(dòng)方的狀態(tài)變遷是CLOSE_WAIT-LAST_ACK-TIME_WAIT。在四次揮手過程中ACK包都是協(xié)議棧自動(dòng)完成的,而FIN包則必須由應(yīng)用層通過closesocket或shutdown主動(dòng)發(fā)送,通常連接正常關(guān)閉后,recv會(huì)得到返回值0,send會(huì)得到錯(cuò)誤碼10058。

除此之外,在我們的日常應(yīng)用中,連接異常關(guān)閉的情況也很多。比如應(yīng)用程序被強(qiáng)行關(guān)閉、本地網(wǎng)絡(luò)突然中斷(禁用網(wǎng)卡、網(wǎng)線拔出)、程序處理不當(dāng)?shù)榷紩?huì)導(dǎo)致連接重置,連接重置時(shí)將會(huì)產(chǎn)生RST包,同時(shí)網(wǎng)絡(luò)絡(luò)緩沖區(qū)中未接收(發(fā)送)的數(shù)據(jù)都將丟失。連接重置后,本方send或recv會(huì)得到錯(cuò)誤碼10053(closesocket時(shí)是10038),對(duì)方recv會(huì)得到錯(cuò)誤碼10054,send則得到錯(cuò)誤碼10053(closesocket時(shí)是10054)。

操作系統(tǒng)為我們提供了兩個(gè)函數(shù)來關(guān)閉一個(gè)TCP連接,分別是closesocket和shutdown。通常情況下,closesocket會(huì)向?qū)Ψ桨l(fā)送一個(gè)FIN包,但是也有例外。比如有一個(gè)工作線程正在調(diào)用recv接收數(shù)據(jù),此時(shí)外部調(diào)用closesocket,會(huì)導(dǎo)致連接重置,同時(shí)向?qū)Ψ桨l(fā)送一個(gè)RST包,這個(gè)RST包是由本方主動(dòng)產(chǎn)生的。

shutdown可以用來關(guān)閉指定方向的連接,該函數(shù)接收兩個(gè)參數(shù),一個(gè)是套接字,另一個(gè)是關(guān)閉的方向,可用值為SD_SEND,SD_RECEIVE和SD_BOTH。方向取值為SD_SEND時(shí),無論socket處于什么狀態(tài)(recv阻塞,或空閑狀態(tài)),都會(huì)向?qū)Ψ桨l(fā)送一個(gè)FIN包,注意這點(diǎn)與closesocket的區(qū)別。此時(shí)本方進(jìn)入FIN_WAIT_2狀態(tài),對(duì)方進(jìn)入CLOSE_WAIT狀態(tài),本方依然可以調(diào)用recv接收數(shù)據(jù);方向取值為SD_RECEIVE時(shí),雙發(fā)連接狀態(tài)沒有改變,依然處于ESTABLISHED狀態(tài),本方依然可以send數(shù)據(jù),但是,如果對(duì)方再調(diào)用send方法,連接會(huì)被立即重置,同時(shí)向?qū)Ψ桨l(fā)送一個(gè)RST包,這個(gè)RST包是被動(dòng)產(chǎn)生的,這點(diǎn)注意與closesocket的區(qū)別。

怎么關(guān)閉tcp135端口 關(guān)閉了有什么影響

桌面網(wǎng)上鄰居——鼠標(biāo)右鍵選擇屬性——選擇列表里的TCP/IP協(xié)議,點(diǎn)屬性——然后在出現(xiàn)的對(duì)話框里點(diǎn)下面的“高級(jí)”——在出現(xiàn)的對(duì)話框里最上面選擇“選項(xiàng)”——"TCP/IP篩選"點(diǎn)屬性——在這里可以設(shè)置關(guān)閉135端口。

關(guān)閉這個(gè)端口沒啥大用,只要你系統(tǒng)補(bǔ)丁打的比較完整,就不用擔(dān)心病毒或者網(wǎng)絡(luò)攻擊。

關(guān)閉這個(gè)端口之后,對(duì)網(wǎng)絡(luò)共享文件訪問,會(huì)有一定的影響。

golang 怎么關(guān)閉conn

packagemainimport("fmt""github.com/garyburd/redigo/redis")funcmain(){conn,err:=redis.Dial("tcp","127.0.0.1:6379")iferr!=nil{panic(err)}deferconn.Close()conn.Do("SET","app1","test1")conn.Do("SET","app2","test2")val,err:=redis.Strings(conn.Do("KEYS","app*"))fmt.Println(val,err)conn.Send("MULTI")fori,_:=rangeval{conn.Send("DEL",val[i])}fmt.Println(conn.Do("EXEC"))}Go是Google開發(fā)的一種編譯型,可平行化,并具有垃圾回收功能的編程語(yǔ)言。羅布·派克(RobPike),羅伯特·格瑞史莫(RobertGriesemer),及肯·湯普遜于2007年9月開始設(shè)計(jì)Go語(yǔ)言,稍后IanLanceTaylor,RussCox加入項(xiàng)目中。Go語(yǔ)言是基于Inferno操作系統(tǒng)所開發(fā)的。[4]Go語(yǔ)言于2009年11月正式宣布推出,成為開放源代碼項(xiàng)目,并在Linux及MacOSX平臺(tái)上進(jìn)行了實(shí)現(xiàn),后追加Windows系統(tǒng)下的實(shí)現(xiàn)。

go語(yǔ)言編寫的tcp服務(wù)器代碼在cmd中運(yùn)行怎么終止

ps -eo pid,cmd | grep 程序的名稱

獲得其pid

kill pid

或者

killall 程序名稱

當(dāng)前標(biāo)題:go語(yǔ)言怎么關(guān)閉tcp,谷歌放棄go語(yǔ)言
文章源于:http://muchs.cn/article8/hcgjop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、用戶體驗(yàn)關(guān)鍵詞優(yōu)化、軟件開發(fā)、網(wǎng)站建設(shè)、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化