grpc服务端主动推送数据到客户端
时间: 2023-08-05 13:36:13 浏览: 180
在 gRPC 中,服务端可以通过流式 RPC 的方式向客户端主动推送数据。具体来说,服务端可以定义一个返回流的 RPC 方法,客户端可以通过调用该方法获得一个流对象,服务端可以在任何时候通过该流对象向客户端发送数据。
下面是一个简单的示例代码,演示了服务端向客户端推送数据的过程:
```protobuf
service MyService {
// 定义一个返回流的 RPC 方法
rpc StreamData (DataRequest) returns (stream DataResponse) {}
}
message DataRequest {
// 请求消息
}
message DataResponse {
// 响应消息
}
```
服务端代码:
```python
class MyService(MyServiceServicer):
def StreamData(self, request, context):
# 客户端调用 StreamData 方法时,会返回一个 stream 对象
for i in range(10):
# 通过 stream 对象向客户端发送数据
yield DataResponse(data=i)
time.sleep(1)
```
客户端代码:
```python
with grpc.insecure_channel('localhost:50051') as channel:
stub = my_service_pb2_grpc.MyServiceStub(channel)
# 客户端调用 StreamData 方法,会得到一个 stream 对象
stream = stub.StreamData(DataRequest())
for response in stream:
# 在循环中不断接收服务端推送的数据
print(response.data)
```
运行代码后,客户端会每秒钟接收到一个服务端推送的数据,直到服务端发送完毕为止。
阅读全文