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语言基础
代码仓库