2017-08-09 75 views
1

在聊天服務中,我們從客戶端獲取請求併發送基於它的響應。 但我的情況是,服務器必須從類的外部方法發送一些不同的對象。Grpc - 將不同的對象傳遞給grpc服務方法

例如,

public StreamObserver<SalaryDetails> message(StreamObserver<Employee> responseObserver) { 
    observers.add(responseObserver); 

    return new StreamObserver<SalaryDetails>() { 

     @Override 
     public void onCompleted() { 
      observers.remove(responseObserver); 
     } 

     @Override 
     public void onError(Throwable arg0) { 
      observers.remove(responseObserver); 
     } 

     @Override 
     public void onNext(SalaryDetails details) { 
      for(StreamObserver<MetricsToVE> observer : observers) { 
       **observer.onNext(Employee.newBuilder() 
        .setName("AA") 
        .setCity("B") 
        .build());** 
      } 
     } 
    }; 
} 

在下面陳述我已硬編碼的字段,應該怎麼傳遞一個對象從一個不同的方法進入GRPC服務類。

+0

如果服務器發送不同的對象到客戶端,聽起來像那些應該是不同的rpc方法。否則,客戶端將不知道返回什麼樣的對象。 – jeffaudio

回答

0

這取決於爲什麼響應值會略有不同:

  1. 如果客戶端可以預測什麼反應類型是基於該請求,那麼你或許應該有基於類型的客戶端調用不同的方法
  2. 如果可能的選項衆所周知的API,那麼你可以使用protobuf's oneof
  3. 如果數據是任意的,那麼你可以使用protobuf's Any

好像#2很可能你的情況。