diff --git a/README.md b/README.md index 982bcb0..31a7684 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,9 @@ - 深入CGO编程: https://github.com/chai2010/gopherchina2018-cgo-talk +## 关注微信公众号(golang-china) + +![](weixin-golang-china.jpg) ## 版权声明 diff --git a/ch4-rpc/ch4-04-grpc.md b/ch4-rpc/ch4-04-grpc.md index c338720..f8e8604 100644 --- a/ch4-rpc/ch4-04-grpc.md +++ b/ch4-rpc/ch4-04-grpc.md @@ -262,11 +262,11 @@ func main() { ```protobuf service PubsubService { rpc Publish (String) returns (String); - rpc SubscribeTopic (String) returns (stream String); + rpc Subscribe (String) returns (stream String); } ``` -其中Publish是普通的RPC方法,SubscribeTopic则是一个单向的流服务。然后grpc插件会为服务端和客户端生成对应的接口: +其中Publish是普通的RPC方法,Subscribe则是一个单向的流服务。然后grpc插件会为服务端和客户端生成对应的接口: ```go type PubsubServiceServer interface { @@ -286,7 +286,7 @@ type HelloService_SubscribeServer interface { } ``` -因为SubscribeTopic是服务端的单向流,因此生成的HelloService_SubscribeServer接口中只有Send方法。 +因为Subscribe是服务端的单向流,因此生成的HelloService_SubscribeServer接口中只有Send方法。 然后就可以实现发布和订阅服务了: @@ -315,9 +315,9 @@ func (p *PubsubService) Publish( func (p *PubsubService) Subscribe( arg *String, stream PubsubService_SubscribeServer, ) error { - ch := p.SubscribeTopic(func(v interface{}) bool { + ch := p.pub.SubscribeTopic(func(v interface{}) bool { if key, ok := v.(string); ok { - if strings.Hasprefix(arg.GetValue()) { + if strings.HasPrefix(key,arg.GetValue()) { return true } } @@ -346,11 +346,11 @@ func main() { client := NewPubsubServiceClient(conn) - reply, err := client.Publish(context.Background(), &String{Value: "golang: hello Go"}) + _, err = client.Publish(context.Background(), &String{Value: "golang: hello Go"}) if err != nil { log.Fatal(err) } - reply, err := client.Publish(context.Background(), &String{Value: "docker: hello Docker"}) + _, err = client.Publish(context.Background(), &String{Value: "docker: hello Docker"}) if err != nil { log.Fatal(err) } @@ -368,7 +368,7 @@ func main() { defer conn.Close() client := NewPubsubServiceClient(conn) - stream, err := client.Channel(context.Background(), &String{Value: "golang:"}) + stream, err := client.SubscribeTopic(context.Background(), &String{Value: "golang:"}) if err != nil { log.Fatal(err) } diff --git a/ch4-rpc/ch4-05-grpc-hack.md b/ch4-rpc/ch4-05-grpc-hack.md index d45d050..7cc6eb5 100644 --- a/ch4-rpc/ch4-05-grpc-hack.md +++ b/ch4-rpc/ch4-05-grpc-hack.md @@ -4,7 +4,7 @@ ## 4.5.1 证书认证 -GRPC建立在HTTP/2协议之上,对TLS提供了很好的支持。我们前面章节中GRPC的服务都没有提供证书支持,因此客户端在链接服务器中通过`grpc.WithInsecure()`选项跳过了对服务器证书的验证。没有启用证书的GRPC服务在和客户端进行的是明文通讯,信息面临被任何第三方监听的风险。为了保障GRPC通信不被第三方监听串改或伪造,我们可以对服务器启动TLS加密特性。 +GRPC建立在HTTP/2协议之上,对TLS提供了很好的支持。我们前面章节中GRPC的服务都没有提供证书支持,因此客户端在链接服务器中通过`grpc.WithInsecure()`选项跳过了对服务器证书的验证。没有启用证书的GRPC服务在和客户端进行的是明文通讯,信息面临被任何第三方监听的风险。为了保障GRPC通信不被第三方监听篡改或伪造,我们可以对服务器启动TLS加密特性。 可以用以下命令为服务器和客户端分别生成私钥和证书: diff --git a/preface.md b/preface.md index 823882e..b1171fe 100644 --- a/preface.md +++ b/preface.md @@ -11,6 +11,10 @@ - https://www.gitbook.com/book/chai2010/advanced-go-programming-book/ +## 关注微信公众号(golang-china) + +![](weixin-golang-china.jpg) + ## 版权声明 [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-nc-sa/4.0/)。 diff --git a/weixin-golang-china.jpg b/weixin-golang-china.jpg new file mode 100644 index 0000000..78facdd Binary files /dev/null and b/weixin-golang-china.jpg differ