栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

golang socket网络波动重连机制,心跳

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang socket网络波动重连机制,心跳

client代码

package main

import (
	"fmt"
	"net"
	"time"
)


func main() {
	for {
		conn, err := net.Dial("tcp", "localhost:8090")
		if err != nil {
			fmt.Printf("socket error[Dial] %s", err.Error())
		} else {
			var d string
			d = "Hello paofu!!"
			conn.Write([]byte(d))
			fmt.Println("Connected to localhost:8090")
			defer func() { _ = conn.Close() }()

			go func() { // 定时心跳任务 每30妙
				for {
					time.Sleep(time.Second * 30)
					if !sendSocket(conn, "ping") {
						break
					}
				}

			}()
			response := make([]byte, 1024)
			for {
				n, err := conn.Read(response)
				if err != nil {
					fmt.Printf("socket error[Read] %s", err.Error())
					break
				}
				msg := string(response[:n])
				fmt.Printf("socket receive %s", msg)
				if err = conn.SetReadDeadline(time.Now().Add(time.Minute * 1)); err != nil { // 重置超时时间
					fmt.Printf("socket error[SetReadDeadline] %s", err.Error())
					return
				}
			}

			// if err := conn.SetReadDeadline(time.Now().Add(time.Minute * 1)); err != nil { // 设置超时2分钟
			// 	fmt.Printf("socket error[SetReadDeadline] %s", err.Error())
			// 	return
			// }

		}
		time.Sleep(time.Second * 3)
	}

}


func sendSocket(conn net.Conn, data string) bool {
	if err := conn.SetWriteDeadline(time.Now().Add(time.Second * 30)); err != nil {
		fmt.Printf("socket error[SetWriteDeadline] %s", err.Error())
		return false
	}
	if _, err := conn.Write([]byte(data)); err != nil {
		fmt.Printf("socket error[Write] %s", err.Error())
		return false
	}
	fmt.Printf("socket send %s", data)
	return true
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906351.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号