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的答案中一樣。 –