1
0
mirror of https://github.com/chai2010/advanced-go-programming-book.git synced 2025-05-24 12:32:21 +00:00

Merge pull request #234 from fuwensun/pr4-4-3b

fixed code
This commit is contained in:
chai2010 2018-08-06 22:47:58 +08:00 committed by GitHub
commit cb90c19989
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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,7 +315,7 @@ func (p *PubsubService) Publish(
func (p *PubsubService) Subscribe(
arg *String, stream PubsubService_SubscribeServer,
) error {
ch := p.SubscribeTopic(func(v interface{}) bool {
ch := p.Subscribe(func(v interface{}) bool {
if key, ok := v.(string); ok {
if strings.Hasprefix(arg.GetValue()) {
return true