Go 语言圣经 8.3 示例: 并发的Echo服务

8.3 示例: 并发的Echo服务

知识点

  • 1.让服务使用并发不只是处理多个客户端的请求,甚至在处理单个连接时也可能会用到

代码

func test_echo()  {
    listener, err := net.Listen("tcp", "localhost:8000")
    if err != nil {
        log.Fatal(err)
    }

    for {
        conn, err := listener.Accept()
        if err != nil {
            log.Fatal(err)
            continue
        }
        go echo_handleConn(conn)
    }
}
func echo_handleConn(c net.Conn)  {
    input := bufio.NewScanner(c)
    for input.Scan() {
        str := input.Text()
        if str == "EOF" {
            break
        }
        if len(str) > 0 {
            go echo(c, str, 1*time.Second)
        }
    }
    c.Close()
}
func echo(c net.Conn, shut string, delay time.Duration)  {
    fmt.Fprintf(c, "\t", strings.ToUpper(shut))
    time.Sleep(delay)
    fmt.Fprintf(c, "\t", shut)
    time.Sleep(delay)
    fmt.Fprintf(c, "\t", strings.ToLower(shut))
}
——不足之处,欢迎补充——

备注

《Go 语言圣经》

  • 学习记录所使用的GO版本是1.8
  • 学习记录所使用的编译器工具为GoLand
  • 学习记录所使用的系统环境为Mac os
  • 学习者有一定的C语言基础

代码仓库

猜你喜欢

转载自blog.csdn.net/liushihua147/article/details/80936044