diff --git a/eBook/14.4.md b/eBook/14.4.md index 17b309a..392b290 100644 --- a/eBook/14.4.md +++ b/eBook/14.4.md @@ -137,7 +137,38 @@ Received on channel 1: 94348 习惯用法:后台服务模式 +服务通常是是用后台协程中的无限循环实现的,在循环中使用`select`获取并处理通道中的数据: +```go +// Backend goroutine. +func backend() { + for { + select { + case cmd := <-ch1: + // Handle ... + case cmd := <-ch2: + ... + case cmd := <-chStop: + // stop server + } + } +} +``` +在程序的其他地方给通道`ch1`,`ch2`发送数据,比如:通道`stop`用来清理结束服务程序。 +另一种方式(但是不太灵活)就是(客户端)在`chRequest`上提交请求,后台协程循环这个通道,使用`switch`根据请求的行为来分别处理: +```go +func backent() { + for req := range chRequest { + switch req.Subjext() { + case A1: // Handle case ... + case A2: // Handle case ... + default: + // Handle illegal request .. + // ... + } + } +} +``` ## 链接