golang中怎麼處理socket長連線?

時間 2021-05-07 02:39:14

1樓:henrylee2cn

在我的socket框架teleport v1.0是就是你說的這種處理思路,兩個chan+goroutine,乙個讀乙個寫是完全可以的。不過teleport自v2.

0就去掉了chan,採用乙個goroutine讀,寫是動態分配goroutine,並且加了併發池,這樣更好些。

你可以從這裡做些了解:

Teleport是乙個通用、高效、靈活的Socket框架。

可用於Peer-Peer對等通訊、RPC、長連線閘道器、微服務、推送服務,遊戲服務等領域。

henrylee2cn/teleport

2樓:阿法科

乙個go肉體為什麼不能往下push?

只要push的觸發方能找到對應conn,還不能write?

當然了你單機併發連線要求低的話可以開多個routine……

3樓:sheepbao

我想問你用的什麼應用協議?http?還是其他?如果是http的話,client和server要互相通訊用websocket就挺好的,如果對協議沒要求,可以考慮mqtt

4樓:聞道

如果要主動推送的話應該是不夠的,因為我們會有乙個goroutine阻塞在讀取client的request上,而且為了高效處理,收到乙個請求可以開乙個goroutine去處理,該goroutine處理完之後可以直接傳送(但是這樣的話可能會有多個goroutine同時傳送,所以要加鎖),或者傳送處理結果給乙個channel,某個goroutine阻塞在該channel上,一收到資料就可以傳送給client。但是如果client需要等到乙個請求回包才會再次傳送的話,也不需要開多個goroutine處理。 至於第二個問題,可以close channel,那麼阻塞在channel上讀取的goroutine就會出錯,可以退出。

怎麼學習 Golang?

yuyoung 許式偉 go語言程式設計,這本書入門即可。深入就看下這個,https 靜水流深 學習go的最好方法就是看一些高質量的開源專案,可以試試這個軟體,他把go模組之間struct的依賴以圖形化的方式展示出來,對於快速了解專案的結構有很大的幫助。有了他,閱讀大型專案也不是啥大問題了 有只貓 ...

汙水處理中怎麼處理汙泥?

禹州華德壓濾機 這是一套基本的汙水處理流程,用來淨化和過濾汙水。處理後的汙泥就想上面其它老師說的,可以堆肥 做高速公路路基 燃燒發電 燒磚等。 金凱烘乾快訊 汙水池的含水98 99 的汙泥經過壓濾機脫水後,降到80 以下。然後經過汙泥幹化機,脫水乾化至10 50 之間 乾化脫水後的汙泥都是顆粒狀,可...

golang中,變數宣告之後就已經分配記憶體了嗎?比如互斥鎖,宣告之後就可以直接使用?

Tony Bai 在Go中變數宣告後就分配了記憶體,這是確定無疑的。但是否可直接用,還要看看下面兩個因素 如果變數是零值,那麼零值是否能直接用?變數值的意義是否符合業務邏輯要求。變數宣告有兩種形式 一種是宣告時未顯式賦值的,Go編譯器會為之賦予零值。比如 var a int a 0var s str...