【问题标题】:Grpc bidirectional Streaming - Can server initiates the message exchange?Grpc 双向流 - 服务器可以启动消息交换吗?
【发布时间】:2017-08-08 09:24:42
【问题描述】:

我的情况是,

服务器和客户端启动

服务器向客户端发送消息,(服务器发起消息交换)

客户端收到消息并回复响应

如果是这样,请帮助我提供 grpc-java 示例代码。

我能找到的只是客户端将消息发送到服务器,因为服务器会发回响应。

【问题讨论】:

  • 我认为 grpc 在 RPC 层不支持真正由服务器发起的对客户端的调用。您可以通过使用消息的双向流在应用程序层实现这一点,如 user675693 的回答。

标签: grpc grpc-java


【解决方案1】:

Bidirectional-streaming 可以实现服务器先发消息

https://grpc.io/docs/reference/java/generated-code.html

// Client Side:
volatile StreamObserver<Message> requestOb;

StreamObserver<Message> responseOb = new StreamObserver<>() {
  @Override public void onNext(Message msg) { requestOb.onNext(msg); }
  @Override public void onError(Throwable t) { requestOb.onError(t); }
  @Override public void onCompleted() { requestOb.onCompleted(); }
}
requestOb = stub.echoTheServer(responseOb);

// Server side:
@Override
public StreamObserver<Message> echoTheServer(StreamObserver<Message> responseOb) {
  for (int i = 0; i < 100; i++) {
    responseOb.onNext(new Message());
  }
  responseOb.onComplete();
  return new StreamObserver<Message>() {
    @Override public void onNext(Message msg) {}
    @Override public void onError(Throwable t) { responseOb.onError(t); }
    @Override public void onCompleted() {}
  }
}

【讨论】:

  • 但是客户端仍然通过调用stub.echoTheServer来发起这个,对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
  • 2018-04-26
  • 2018-11-03
  • 2021-11-27
  • 2019-09-30
  • 1970-01-01
相关资源
最近更新 更多