glight2000 10 лет назад
Родитель
Сommit
a6aec5bed0
1 измененных файлов с 31 добавлено и 0 удалено
  1. 31 0
      eBook/14.4.md

+ 31 - 0
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 ..
+			  // ...
+		}
+	}
+}
+```
 
 ## 链接