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
}
}
}
func Server(listen *net