新聞中心
【golang】高并發(fā)下TCP常見問題解決方案
首先,看一下TCP握手簡單描繪過程:
成都創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元滿城做網(wǎng)站,已為上家服務(wù),為滿城各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
其握手過程原理,就不必說了,有很多詳細(xì)文章進(jìn)行敘述,本文只關(guān)注研究重點(diǎn)。
在第三次握手過程中,如果服務(wù)器收到ACK,就會與客戶端建立連接,此時(shí)內(nèi)核會把連接從半連接隊(duì)列移除,然后創(chuàng)建新的連接,并將其添加到全連接隊(duì)列,等待進(jìn)程調(diào)用。
如果服務(wù)器繁忙,來不及調(diào)用連接導(dǎo)致全連接隊(duì)列溢出,服務(wù)器就會放棄當(dāng)前握手連接,發(fā)送RST給客戶端,即connection reset by peer。
在linux平臺上,客戶端在進(jìn)行高并發(fā)TCP連接處理時(shí),最高并發(fā)數(shù)量都要受系統(tǒng)對用戶單一進(jìn)程同時(shí)打開文件數(shù)量的限制(這是因?yàn)橄到y(tǒng)每個(gè)TCP都是SOCKET句柄,每個(gè)soker句柄都是一個(gè)文件),當(dāng)打開連接超過限制,就會出現(xiàn)too many open files。
使用下指令查看最大句柄數(shù)量:
增加句柄解決方案
go語言tcp客戶端怎么和服務(wù)端鏈接
網(wǎng)絡(luò)連接需要用socket,易語言用查易語言socket用或者看看否TCP協(xié)議相關(guān)組件
go語言TCP連接池rocket049/connpool使用
安裝:
go get -v -u github.com/rocket049/connpool
go get -v -u gitee.com/rocket049/connpool
rocket049/connpool 包是本人用go語言開發(fā)的,提供一個(gè)通用的TCP連接池,初始化參數(shù)包括最高連接數(shù)、超時(shí)秒數(shù)、連接函數(shù),放回連接池的連接被重新取出時(shí),如果已經(jīng)超時(shí),將會自動重新連接;如果沒有超時(shí),連接將被復(fù)用。
可調(diào)用的函數(shù):
調(diào)用示例:
當(dāng)前文章:go語言怎么連接tcp go語言如何
文章網(wǎng)址:http://www.dlmjj.cn/article/docjdoj.html