GoLang中socket心跳检测的实现

 更新时间:2025年02月20日 09:51:37   作者:程序员勋勋1  
本文主要介绍了GoLang中socket心跳检测的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

服务端代码:

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心跳检测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Golang泛型的使用方法详解

    Golang泛型的使用方法详解

    这篇文章主要介绍了Golang中泛型的使用,Go和Python语言不同,处理不同数据类型非常严格。如Python可以定义函数带两个数值类型并返回较大的数值,但可以不严格指定参数类型为float或integer
    2022-12-12
  • Go中Gzip与json搭配实现数据压缩demo

    Go中Gzip与json搭配实现数据压缩demo

    这篇文章主要为大家介绍了Go中Gzip与json搭配使用压缩数据的实现demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • logrus日志自定义格式操作

    logrus日志自定义格式操作

    这篇文章主要介绍了logrus日志自定义格式操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 深入理解Go中的项目代码布局

    深入理解Go中的项目代码布局

    Go 语言的创世项目其实就是 Go 语言项目自身,是全世界第一个 Go 语言项目,本文主要来和大家详细介绍一下Go中的项目代码布局,需要的可以了解下
    2023-11-11
  • Go语言使用AES加密解密的示例代码

    Go语言使用AES加密解密的示例代码

    这篇文章主要介绍了Go语言使用AES加密解密的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Golang使用bcrypt实现密码加密和校验的操作代码

    Golang使用bcrypt实现密码加密和校验的操作代码

    bcrypt可以用于数据库中的用户密码保存,相比md5而言更加的安全可靠,这篇文章主要介绍了Golang使用bcrypt实现密码加密和校验的操作代码,需要的朋友可以参考下
    2024-05-05
  • golang 函数返回chan类型的操作

    golang 函数返回chan类型的操作

    这篇文章主要介绍了golang 函数返回chan类型的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • GoLang之使用Context控制请求超时的实现

    GoLang之使用Context控制请求超时的实现

    这篇文章主要介绍了GoLang之使用Context控制请求超时的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Go切片扩容机制详细说明和举例

    Go切片扩容机制详细说明和举例

    Go 语言中的切片是一种动态数组,它可以自动扩容和缩容以适应不同的数据量,这篇文章主要给大家介绍了关于Go切片扩容机制详细说明和举例的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • golang抓取tcp包的实现方式

    golang抓取tcp包的实现方式

    使用`golang`的`packet`和`pcap`库可以抓取TCP数据包,首先,确保安装了`pcap`库,然后使用以下代码打开网络接口,设置过滤规则为“tcp”,开始捕获并解析TCP数据包,运行代码时需要管理员权限
    2024-12-12

最新评论