GoLang中socket心跳檢測(cè)的實(shí)現(xiàn)
心跳檢測(cè)是確保服務(wù)端與客戶(hù)端之間穩(wěn)定性的一種機(jī)制,具體實(shí)現(xiàn)方法為每間隔固定時(shí)間相互發(fā)送消息并響應(yīng)。
服務(wù)端代碼:
package main import ( "fmt" "net" "time" ) func main() { // 啟動(dòng) TCP 服務(wù)器 listener, err := net.Listen("tcp", ":8080") if err != nil { fmt.Println("Error starting server:", err) return } defer listener.Close() fmt.Println("Server is listening on port 8080") for { conn, err := listener.Accept() if err != nil { fmt.Println("Error accepting connection:", err) continue } go handleConnection(conn) } } func handleConnection(conn net.Conn) { defer conn.Close() buffer := make([]byte, 1024) for { // 讀取數(shù)據(jù) n, err := conn.Read(buffer) if err != nil { fmt.Println("Connection closed:", err) return } fmt.Println("Received:", string(buffer[:n])) // 響應(yīng)心跳消息 if string(buffer[:n]) == "pong" { conn.Write([]byte("pong")) } } }
客戶(hù)端代碼:
package main import ( "fmt" "net" "time" ) func main() { // 連接到服務(wù)器 conn, err := net.Dial("tcp", "localhost:8080") if err != nil { fmt.Println("Error connecting to server:", err) return } defer conn.Close() // 定義心跳間隔 ticker := time.NewTicker(2 * time.Second) defer ticker.Stop() go func() { for { <-ticker.C _, err := conn.Write([]byte("ping")) if err != nil { fmt.Println("Error sending heartbeat:", err) return } fmt.Println("ping") } }() // 讀取服務(wù)器響應(yīng) buffer := make([]byte, 1024) for { n, err := conn.Read(buffer) if err != nil { fmt.Println("Error reading from server:", err) return } fmt.Println("Received:", string(buffer[:n])) } }
到此這篇關(guān)于GoLang中socket心跳檢測(cè)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)GoLang socket心跳檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go中Gzip與json搭配實(shí)現(xiàn)數(shù)據(jù)壓縮demo
這篇文章主要為大家介紹了Go中Gzip與json搭配使用壓縮數(shù)據(jù)的實(shí)現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05Golang使用bcrypt實(shí)現(xiàn)密碼加密和校驗(yàn)的操作代碼
bcrypt可以用于數(shù)據(jù)庫(kù)中的用戶(hù)密碼保存,相比md5而言更加的安全可靠,這篇文章主要介紹了Golang使用bcrypt實(shí)現(xiàn)密碼加密和校驗(yàn)的操作代碼,需要的朋友可以參考下2024-05-05golang 函數(shù)返回chan類(lèi)型的操作
這篇文章主要介紹了golang 函數(shù)返回chan類(lèi)型的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04GoLang之使用Context控制請(qǐng)求超時(shí)的實(shí)現(xiàn)
這篇文章主要介紹了GoLang之使用Context控制請(qǐng)求超時(shí)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Go切片擴(kuò)容機(jī)制詳細(xì)說(shuō)明和舉例
Go 語(yǔ)言中的切片是一種動(dòng)態(tài)數(shù)組,它可以自動(dòng)擴(kuò)容和縮容以適應(yīng)不同的數(shù)據(jù)量,這篇文章主要給大家介紹了關(guān)于Go切片擴(kuò)容機(jī)制詳細(xì)說(shuō)明和舉例的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03