心跳检测是确保服务端与客户端之间稳定性的一种机制,具体实现方法为每间隔固定时间相互发送消息并响应。
服务端代码: - package main
- import (
- "fmt"
- "net"
- "time"
- )
- func 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(conn)
- }
- }
- 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 * 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")
- }
- }()
- // 读取服务器响应
- 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心跳检测内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |