package main
// golang实现带有心跳检测的tcp长连接
// server
import (
"fmt"
"net"
"time"
)
// message struct:
// c#d
var (
Req_REGISTER byte = 1 // 1 --- c register cid
Res_REGISTER byte = 2 // 2 --- s response
Req_HEARTBEAT byte = 3 // 3 --- s send heartbeat req
Res_HEARTBEAT byte = 4 // 4 --- c send heartbeat res
Req byte = 5 // 5 --- cs send data
Res byte = 6 // 6 --- cs send ack
)
type CS struct {
Rch chan []byte
Wch chan []byte
Dch chan bool
u string
}
func NewCs(uid string) *CS {
return &CS{Rch: make(chan []byte), Wch: make(chan []byte), u: uid}
}
var CMap map[string]*CS
func main() {
CMap = make(map[string]*CS)
listen, err := net.ListenTCP("tcp", &net.TCPAddr{net.ParseIP("127.0.0.1"), 6666, ""})
if err != nil {
fmt.Println("监听端口失败:", err.Error())
return
}
fmt.Println("已初始化连接,等待客户端连接...")
go PushGRT()
Server(listen)
select {}
}
func PushGRT() {
for {
time.Sleep(15 * time.Second)
for k, v := range CMap {
fmt.Println("push msg to user:" + k)
v.Wch <- []byte{Req, '#', 'p', 'u', 's', 'h', '!'}
}
}
}
func Server(listen *n
golang实现带有心跳检测的tcp长连接
最新推荐文章于 2024-07-22 16:10:27 发布
该博客介绍了如何使用Golang构建一个具备心跳检测机制的TCP长连接服务。内容涉及网络编程基础知识以及Golang的net包应用,旨在确保连接在长时间无数据传输时仍能保持活跃。
摘要由CSDN通过智能技术生成