首先,看一下TCP握手簡單描繪過程:
凌河網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,凌河網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為凌河1000多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的凌河做網(wǎng)站的公司定做!
其握手過程原理,就不必說了,有很多詳細(xì)文章進(jìn)行敘述,本文只關(guān)注研究重點(diǎn)。
在第三次握手過程中,如果服務(wù)器收到ACK,就會與客戶端建立連接,此時內(nèi)核會把連接從半連接隊列移除,然后創(chuàng)建新的連接,并將其添加到全連接隊列,等待進(jìn)程調(diào)用。
如果服務(wù)器繁忙,來不及調(diào)用連接導(dǎo)致全連接隊列溢出,服務(wù)器就會放棄當(dāng)前握手連接,發(fā)送RST給客戶端,即connection reset by peer。
在linux平臺上,客戶端在進(jìn)行高并發(fā)TCP連接處理時,最高并發(fā)數(shù)量都要受系統(tǒng)對用戶單一進(jìn)程同時打開文件數(shù)量的限制(這是因為系統(tǒng)每個TCP都是SOCKET句柄,每個soker句柄都是一個文件),當(dāng)打開連接超過限制,就會出現(xiàn)too many open files。
使用下指令查看最大句柄數(shù)量:
增加句柄解決方案
網(wǎng)絡(luò)連接需要用socket,易語言用查易語言socket用或者看看否TCP協(xié)議相關(guān)組件
安裝:
go get -v -u github點(diǎn)抗 /rocket049/connpool
go get -v -u gitee點(diǎn)抗 /rocket049/connpool
rocket049/connpool 包是本人用go語言開發(fā)的,提供一個通用的TCP連接池,初始化參數(shù)包括最高連接數(shù)、超時秒數(shù)、連接函數(shù),放回連接池的連接被重新取出時,如果已經(jīng)超時,將會自動重新連接;如果沒有超時,連接將被復(fù)用。
可調(diào)用的函數(shù):
調(diào)用示例: