go語言tcp服務器響應 go實現高并發TCP服務器

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

首先,看一下TCP握手簡單描繪過程:

成都網站建設哪家好,找創新互聯!專注于網頁設計、成都網站建設、微信開發、微信小程序、集團成都企業網站建設等服務項目。核心團隊均擁有互聯網行業多年經驗,服務眾多知名企業客戶;涵蓋的客戶類型包括:成都PE包裝袋等眾多領域,積累了大量豐富的經驗,同時也獲得了客戶的一致贊譽!

其握手過程原理,就不必說了,有很多詳細文章進行敘述,本文只關注研究重點。

在第三次握手過程中,如果服務器收到ACK,就會與客戶端建立連接,此時內核會把連接從半連接隊列移除,然后創建新的連接,并將其添加到全連接隊列,等待進程調用。

如果服務器繁忙,來不及調用連接導致全連接隊列溢出,服務器就會放棄當前握手連接,發送RST給客戶端,即connection reset by peer。

在linux平臺上,客戶端在進行高并發TCP連接處理時,最高并發數量都要受系統對用戶單一進程同時打開文件數量的限制(這是因為系統每個TCP都是SOCKET句柄,每個soker句柄都是一個文件),當打開連接超過限制,就會出現too many open files。

使用下指令查看最大句柄數量:

增加句柄解決方案

在 Go 中實現一個支持并發的 TCP 服務端

TCP 和 UDP 服務端隨處可見,它們基于 TCP/IP 協議棧,通過網絡為客戶端提供服務。在這篇文章中,我將介紹如何使用 Go 語言開發一個用于返回隨機數、支持并發的 TCP 服務端。對于每一個來自 TCP 客戶端的連接,它都會啟動一個新的 goroutine(輕量級線程)來處理相應的請求。

你可以在 GitHub 上找到本項目的源碼:concTcp.go。

這個程序的主要邏輯在 handleConnection 函數中,具體實現如下:

在 main 函數的實現部分,每當 TCP 服務端收到 TCP 客戶端的連接請求,它都會啟動一個新的 goroutine 來為這個請求提供服務。

首先, main 確保程序至少有一個命令行參數。注意,現有代碼并沒有檢查這個參數是否為有效的 TCP 端口號。不過,如果它是一個無效的 TCP 端口號, net.Listen 就會調用失敗,并返回一個錯誤信息,類似下面這樣:

net.Listen 函數用于告訴 Go 接受網絡連接,因而承擔了服務端的角色。它的返回值類型是 net.Conn ,后者實現了 io.Reader 和 io.Writer 接口。此外, main 函數中還調用了 rand.Seed 函數,用于初始化隨機數生成器。最后, for 循環允許程序一直使用 Accept 函數來接受 TCP 客戶端的連接請求,并以 goroutine 的方式來運行 handleConnection(c) 函數,處理客戶端的后續請求。

net.Listen 函數的第一個參數定義了使用的網絡類型,而第二個參數定義了服務端監聽的地址和端口號。第一個參數的有效值為 tcp 、 tcp4 、 tcp6 、 udp 、 udp4 、 udp6 、 ip 、 ip4 、 ip6 、 Unix (Unix 套接字)、 Unixgram 和 Unixpacket ,其中: tcp4 、 udp4 和 ip4 只接受 IPv4 地址,而 tcp6 、 udp6 和 ip6 只接受 IPv6 地址。

concTCP.go 需要一個命令行參數,來指定監聽的端口號。當它開始服務 TCP 客戶端時,你會得到類似下面的輸出:

netstat 的輸出可以確認 congTCP.go 正在為多個 TCP 客戶端提供服務,并且仍在繼續監聽建立連接的請求:

在上面輸出中,最后一行顯示了有一個進程正在監聽 8001 端口,這意味著你可以繼續連接 TCP 的 8001 端口。第一行和第二行顯示了有一個已建立的 TCP 網絡連接,它占用了 8001 和 62556 端口。相似地,第三行和第四行顯示了有另一個已建立的 TCP 連接,它占用了 8001 和 62554 端口。

下面這張圖片顯示了 concTCP.go 在服務多個 TCP 客戶端時的輸出:

類似地,下面這張圖片顯示了兩個 TCP 客戶端的輸出(使用了 nc 工具):

你可以在 維基百科上找到更多關于 nc (即 netcat )的信息。

現在,你學會了如何用大約 65 行 Go 代碼來開發一個生成隨機數、支持并發的 TCP 服務端,這真是太棒了!如果你想要讓你的 TCP 服務端執行別的任務,只需要修改 handleConnection 函數即可。

via:

作者:Mihalis Tsoukalos選題:lkxed譯者:lkxed校對:wxy

go語言tcp客戶端怎么和服務端鏈接

網絡連接需要用socket,易語言用查易語言socket用或者看看否TCP協議相關組件

文章標題:go語言tcp服務器響應 go實現高并發TCP服務器
鏈接分享:http://m.kartarina.com/article40/hgjiho.html

成都網站建設公司_創新互聯,為您提供Google網站營銷小程序開發商城網站網站設計品牌網站制作

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站建設
主站蜘蛛池模板: 秋霞鲁丝片无码av| 天堂无码在线观看| 国产成人无码区免费内射一片色欲| 国产成人无码一区二区在线观看 | 2014AV天堂无码一区| 无码AV中文字幕久久专区| 免费无码一区二区三区| 免费无码又爽又高潮视频| 亚洲VA中文字幕无码一二三区| 久久午夜无码鲁丝片秋霞| r级无码视频在线观看| 亚洲爆乳大丰满无码专区| 久久精品无码中文字幕| 92午夜少妇极品福利无码电影 | 久久无码人妻一区二区三区| 国产精品无码一区二区三区不卡| 久久精品九九热无码免贵| 国产成人无码精品久久久性色 | 色综合无码AV网站| 久久亚洲AV成人无码国产| 久久亚洲精品无码观看不卡| 中文字幕韩国三级理论无码| 久久无码av三级| 亚洲AV成人无码久久精品老人| 无码人妻精品丰满熟妇区| 亚洲中文久久精品无码1| 亚洲第一极品精品无码久久| 国产免费黄色无码视频| 国产在线无码精品无码| 亚洲AV成人噜噜无码网站| 亚洲中文字幕伊人久久无码| 色综合久久久无码中文字幕波多| 亚洲国产成人精品无码一区二区| 高潮潮喷奶水飞溅视频无码| 久久国产三级无码一区二区| 国产成人亚洲综合无码| 九九久久精品无码专区| 欧日韩国产无码专区| 日韩视频无码日韩视频又2021| 精品久久久久久中文字幕无码| 伊人久久一区二区三区无码|