GoLang中socket心跳檢測的實(shí)現(xiàn)
心跳檢測是確保服務(wù)端與客戶端之間穩(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"))
}
}
}客戶端代碼:
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心跳檢測的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)GoLang socket心跳檢測內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang空結(jié)構(gòu)體struct{}用途,你知道嗎
這篇文章主要介紹了Golang空結(jié)構(gòu)體struct{}用途,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Golang基礎(chǔ)常識(shí)性面試中常見的六大陷阱及應(yīng)對(duì)技巧總結(jié)
Go是一門簡單有趣的語言,但與其他語言類似,它會(huì)有一些技巧,這篇文章主要給大家介紹了關(guān)于Golang基礎(chǔ)常識(shí)性面試中常見的六大陷阱及應(yīng)對(duì)技巧的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08
Go語言copy()實(shí)現(xiàn)切片復(fù)制
本文主要介紹了Go語言copy()實(shí)現(xiàn)切片復(fù)制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
Golang 操作TSV文件的實(shí)戰(zhàn)示例
本文主要介紹了Golang 操作TSV文件的實(shí)戰(zhàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Go語言模型:string的底層數(shù)據(jù)結(jié)構(gòu)與高效操作詳解
這篇文章主要介紹了Go語言模型:string的底層數(shù)據(jù)結(jié)構(gòu)與高效操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12
k8s容器互聯(lián)flannel?vxlan通信原理
這篇文章主要為大家介紹了k8s容器互聯(lián)flannel?vxlan通信原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

