1
我的情况是,Grpc双向流媒体 - 服务器可以启动消息交换吗?
服务器和客户端发起
服务器发送消息给客户端,(服务器发起的消息交换)
客户端接收消息并回信响应
如果所以,请帮我用grpc-java示例代码。
所有我能找到的是客户端发送消息到服务器,为该服务器发送回应。
我的情况是,Grpc双向流媒体 - 服务器可以启动消息交换吗?
服务器和客户端发起
服务器发送消息给客户端,(服务器发起的消息交换)
客户端接收消息并回信响应
如果所以,请帮我用grpc-java示例代码。
所有我能找到的是客户端发送消息到服务器,为该服务器发送回应。
服务器发送消息,首先可以通过双向流
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'启动它,对吧? –
我觉得GRPC不支持在RPC层真正的服务器发起呼叫的客户端来实现。您可以通过使用消息的双向流式在应用程序层实现这一点,就像在user675693的答案中一样。 –