Skip to content

Commit

Permalink
Merge pull request #182 from fuwensun/pr4-4-2
Browse files Browse the repository at this point in the history
ch4-04-fix typos
  • Loading branch information
chai2010 authored Jul 6, 2018
2 parents a15ee03 + 9a33644 commit 21c350f
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions ch4-rpc/ch4-04-grpc.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ GRPC和标准库的RPC框架还有一个区别,GRPC生成的接口并不支持

## GRPC流

RPC是远程函数调用,因此每次调用的函数参数和返回值不能太大,负责将严重影响每次调用的性能。因此传统的RPC方法调用对于上传和下载较大数据量场景并不适合。同时传统RPC模式也不适用于对于时间不确定的订阅和发布模式。为此,GRPC框架分别提供了服务器端和客户端的流特性。
RPC是远程函数调用,因此每次调用的函数参数和返回值不能太大,否则将严重影响每次调用的性能。因此传统的RPC方法调用对于上传和下载较大数据量场景并不适合。同时传统RPC模式也不适用于对时间不确定的订阅和发布模式。为此,GRPC框架分别提供了服务器端和客户端的流特性。

服务端或客户端的单向流是双向流的特例,我们在HelloService增加一个支持双向流的Channel方法:

Expand All @@ -109,7 +109,7 @@ service HelloService {

关键字stream指定启用流特性,参数部分是接收客户端参数的流,返回值是返回给客户端的流。

重新生成代码可以可以看到接口中新增加的Channel方法的定义
重新生成代码可以看到接口中新增加的Channel方法的定义

```go
type HelloServiceServer interface {
Expand Down Expand Up @@ -165,7 +165,7 @@ func (p *HelloServiceImpl) Channel(stream HelloService_ChannelServer) error {
}
```

服务端在循环中接收客户端发来的数据,如果遇到io.EOF表示客户端流被关闭,如果函数退出表示服务端流关闭。然后生成返回的数据通过流发送给客户端。需要主要的是,发送和接收的操作并不需要一一对应,用户可以根据真实场景进行组织代码。
服务端在循环中接收客户端发来的数据,如果遇到io.EOF表示客户端流被关闭,如果函数退出表示服务端流关闭。然后生成返回的数据通过流发送给客户端。需要注意的是,发送和接收的操作并不需要一一对应,用户可以根据真实场景进行组织代码。

客户端需要先调用Channel方法获取返回的流对象:

Expand All @@ -176,7 +176,7 @@ if err != nil {
}
```

在客户端我们将发送和接收操作放到两个独立的Goroutine。首先是向服务端发生数据
在客户端我们将发送和接收操作放到两个独立的Goroutine。首先是向服务端发送数据

```go
go func() {
Expand Down Expand Up @@ -204,7 +204,7 @@ for {
}
```

这样就完成了完整的流接收和发生支持
这样就完成了完整的流接收和发送支持


<!--
Expand Down

0 comments on commit 21c350f

Please sign in to comment.