欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

GoLang中socket心跳檢測(cè)的實(shí)現(xiàn)

 更新時(shí)間:2025年02月20日 09:51:37   作者:程序員勛勛1  
本文主要介紹了GoLang中socket心跳檢測(cè)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

心跳檢測(cè)是確保服務(wù)端與客戶(hù)端之間穩(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"))
        }
    }
}

客戶(hù)端代碼:

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心跳檢測(cè)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)GoLang socket心跳檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Golang泛型的使用方法詳解

    Golang泛型的使用方法詳解

    這篇文章主要介紹了Golang中泛型的使用,Go和Python語(yǔ)言不同,處理不同數(shù)據(jù)類(lèi)型非常嚴(yán)格。如Python可以定義函數(shù)帶兩個(gè)數(shù)值類(lèi)型并返回較大的數(shù)值,但可以不嚴(yán)格指定參數(shù)類(lèi)型為float或integer
    2022-12-12
  • Go中Gzip與json搭配實(shí)現(xiàn)數(shù)據(jù)壓縮demo

    Go中Gzip與json搭配實(shí)現(xiàn)數(shù)據(jù)壓縮demo

    這篇文章主要為大家介紹了Go中Gzip與json搭配使用壓縮數(shù)據(jù)的實(shí)現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • logrus日志自定義格式操作

    logrus日志自定義格式操作

    這篇文章主要介紹了logrus日志自定義格式操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • 深入理解Go中的項(xiàng)目代碼布局

    深入理解Go中的項(xiàng)目代碼布局

    Go?語(yǔ)言的創(chuàng)世項(xiàng)目其實(shí)就是?Go?語(yǔ)言項(xiàng)目自身,是全世界第一個(gè)?Go?語(yǔ)言項(xiàng)目,本文主要來(lái)和大家詳細(xì)介紹一下Go中的項(xiàng)目代碼布局,需要的可以了解下
    2023-11-11
  • Go語(yǔ)言使用AES加密解密的示例代碼

    Go語(yǔ)言使用AES加密解密的示例代碼

    這篇文章主要介紹了Go語(yǔ)言使用AES加密解密的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Golang使用bcrypt實(shí)現(xiàn)密碼加密和校驗(yàn)的操作代碼

    Golang使用bcrypt實(shí)現(xiàn)密碼加密和校驗(yàn)的操作代碼

    bcrypt可以用于數(shù)據(jù)庫(kù)中的用戶(hù)密碼保存,相比md5而言更加的安全可靠,這篇文章主要介紹了Golang使用bcrypt實(shí)現(xiàn)密碼加密和校驗(yàn)的操作代碼,需要的朋友可以參考下
    2024-05-05
  • golang 函數(shù)返回chan類(lèi)型的操作

    golang 函數(shù)返回chan類(lèi)型的操作

    這篇文章主要介紹了golang 函數(shù)返回chan類(lèi)型的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • GoLang之使用Context控制請(qǐng)求超時(shí)的實(shí)現(xiàn)

    GoLang之使用Context控制請(qǐng)求超時(shí)的實(shí)現(xiàn)

    這篇文章主要介紹了GoLang之使用Context控制請(qǐng)求超時(shí)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Go切片擴(kuò)容機(jī)制詳細(xì)說(shuō)明和舉例

    Go切片擴(kuò)容機(jī)制詳細(xì)說(shuō)明和舉例

    Go 語(yǔ)言中的切片是一種動(dòng)態(tài)數(shù)組,它可以自動(dòng)擴(kuò)容和縮容以適應(yīng)不同的數(shù)據(jù)量,這篇文章主要給大家介紹了關(guān)于Go切片擴(kuò)容機(jī)制詳細(xì)說(shuō)明和舉例的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • golang抓取tcp包的實(shí)現(xiàn)方式

    golang抓取tcp包的實(shí)現(xiàn)方式

    使用`golang`的`packet`和`pcap`庫(kù)可以抓取TCP數(shù)據(jù)包,首先,確保安裝了`pcap`庫(kù),然后使用以下代碼打開(kāi)網(wǎng)絡(luò)接口,設(shè)置過(guò)濾規(guī)則為“tcp”,開(kāi)始捕獲并解析TCP數(shù)據(jù)包,運(yùn)行代碼時(shí)需要管理員權(quán)限
    2024-12-12

最新評(píng)論