• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    GoLang中socket心跳检测的实现

    发布者: 姬7089 | 发布时间: 2025-8-14 05:17| 查看数: 56| 评论数: 0|帖子模式

    心跳检测是确保服务端与客户端之间稳定性的一种机制,具体实现方法为每间隔固定时间相互发送消息并响应。
    服务端代码:
    1. package main

    2. import (
    3.     "fmt"
    4.     "net"
    5.     "time"
    6. )

    7. func main() {
    8.     // 启动 TCP 服务器
    9.     listener, err := net.Listen("tcp", ":8080")
    10.     if err != nil {
    11.         fmt.Println("Error starting server:", err)
    12.         return
    13.     }
    14.     defer listener.Close()

    15.     fmt.Println("Server is listening on port 8080")

    16.     for {
    17.         conn, err := listener.Accept()
    18.         if err != nil {
    19.             fmt.Println("Error accepting connection:", err)
    20.             continue
    21.         }
    22.         go handleConnection(conn)
    23.     }
    24. }

    25. func handleConnection(conn net.Conn) {
    26.     defer conn.Close()
    27.     buffer := make([]byte, 1024)

    28.     for {
    29.         // 读取数据
    30.         n, err := conn.Read(buffer)
    31.         if err != nil {
    32.             fmt.Println("Connection closed:", err)
    33.             return
    34.         }
    35.         fmt.Println("Received:", string(buffer[:n]))

    36.         // 响应心跳消息
    37.         if string(buffer[:n]) == "pong" {
    38.             conn.Write([]byte("pong"))
    39.         }
    40.     }
    41. }
    复制代码
    客户端代码:
    1. package main

    2. import (
    3.     "fmt"
    4.     "net"
    5.     "time"
    6. )

    7. func main() {
    8.     // 连接到服务器
    9.     conn, err := net.Dial("tcp", "localhost:8080")
    10.     if err != nil {
    11.         fmt.Println("Error connecting to server:", err)
    12.         return
    13.     }
    14.     defer conn.Close()

    15.     // 定义心跳间隔
    16.     ticker := time.NewTicker(2 * time.Second)
    17.     defer ticker.Stop()

    18.     go func() {
    19.         for {
    20.             <-ticker.C
    21.             _, err := conn.Write([]byte("ping"))
    22.             if err != nil {
    23.                 fmt.Println("Error sending heartbeat:", err)
    24.                 return
    25.             }
    26.             fmt.Println("ping")
    27.         }
    28.     }()

    29.     // 读取服务器响应
    30.     buffer := make([]byte, 1024)
    31.     for {
    32.         n, err := conn.Read(buffer)
    33.         if err != nil {
    34.             fmt.Println("Error reading from server:", err)
    35.             return
    36.         }
    37.         fmt.Println("Received:", string(buffer[:n]))
    38.     }
    39. }
    复制代码
    到此这篇关于GoLang中socket心跳检测的实现的文章就介绍到这了,更多相关GoLang socket心跳检测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:互联网
    免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表