GoLang中socket心跳检测的实现
心跳检测是确保服务端与客户端之间稳定性的一种机制,具体实现方法为每间隔固定时间相互发送消息并响应。
服务端代码:
package main import ( "fmt" "net" "time" ) fuandroidnc main() { // 启动 TCP 服务器 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(connwww.devze.com) } } func handleConnection(conn net.Conn) { defer conn.Close() buffer := make([]byte, 1024) for { // 读取数据 n, err := conn.Read(buffer) if err != nil { fmt.Println("Connection closed:", err) return } fmt.Println("Received:", string(buffer[:n])) // 响应心跳消息 if string(buffer[:n]) == "pong" { conn.Write([]byte("pong")) } } }
客户端代码:
package main import ( "fmt" "net" "time" ) func main() { // 连接到服务器 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 *www.devze.com time.Second) defepythonr ticker.Stop() go func() { python for { <-ticker.C _, err := conn.Write([]byte("ping")) if err != nil { fmt.Println("Error sending heartbeat:", err) return } fmt.Println("ping") } }() // 读取服务器响应 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])) } }
到此这篇关于golang中socket心跳检测的实现的文章就介绍到这了,更多相关GoLang socket心跳检测内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论