2017-08-09 235 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很可能你的情况。