tcp server 用于给andriod 客户端定时发送消息
liuxiaolong
2019-06-04 130d52d6dff343a1096fcdc04f01c649beda35d2
when conn'num>50 close all,client reconn
1个文件已修改
34 ■■■■■ 已修改文件
server.go 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server.go
@@ -20,7 +20,7 @@
var sec = flag.Int("sec", 10, "the second for query data. ")
var Level = flag.String("level","ErrorLevel","log level")
var ipMap map[string]net.Conn
//var ipMap map[string]net.Conn
func main() {
    flag.Parse()
@@ -40,17 +40,18 @@
    connArr:=make([]net.Conn,0)
    ipMap = make(map[string]net.Conn,0)
    //ipMap = make(map[string]net.Conn,0)
    for {
        conn, err := listener.Accept()//
        clientIpPort := conn.RemoteAddr().String()
        index := strings.Index(clientIpPort, ":")
        ipStr := clientIpPort[:index-1]
        if oldConn,ok := ipMap[ipStr];ok {
            oldConn.Close()
        }
        ipMap[ipStr] = conn
        //clientIpPort := conn.RemoteAddr().String()
        //index := strings.Index(clientIpPort, ":")
        //ipStr := clientIpPort[:index-1]
        //if oldConn,ok := ipMap[ipStr];ok {
        //    oldConn.Close()
        //}
        //ipMap[ipStr] = conn
        connArr = append(connArr,conn)
        if err != nil {
            log.Log.Infoln("some connecion error: ", err)
@@ -66,13 +67,22 @@
    ech := make(chan error)
    go func(conn net.Conn, ech chan error) {
        buf := make([]byte, 10)
        for {
            readMsg, err := conn.Read(buf)
            log.Log.Infoln("Read completed,readMsg:",readMsg,",err:",err)
            ech <- err
            break
        }
    }(conn, ech)
    go func(conArray []net.Conn) {
        for {
            if len(conArray)>50 {
                for _,connEach :=range conArray{
                    connEach.Close()
                }
                return
            }
            time.Sleep(200*time.Second)
        }
    }(connArr)
    tick := time.NewTicker(10 * time.Second)
    for {