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

client代码

package mainimport ("fmt""net""time"
)/**
socket 连接
*/
func main() {for {conn, err := net.Dial("tcp", "localhost:8090")if err != nil {fmt.Printf("socket error[Dial] %s", err.Error())} else {var d stringd = "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
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部