Z f*_* fp 9 protocol-buffers node.js grpc
我的protobuf文件是这样的:
syntax = "proto3"; import "google/protobuf/any.proto";
service RoomService {
getTestAny (Hotelid) returns (google.protobuf.Any); }
message Hotelid {
string hotelid = 1;
}
message HtlInDate {
Hotelid hotelid = 1;
string date = 2;
}
Run Code Online (Sandbox Code Playgroud)
我的 java-gRPC-server 代码是这样的:
@Override
public void getTestAny(Roomservice.Hotelid request, StreamObserver<Any> responseObserver) {
Roomservice.Hotelid hotelid = Roomservice.Hotelid.newBuilder()
.setHotelid("This is Hotelid")
.build();
Roomservice.HtlInDate htlDate = Roomservice.HtlInDate.newBuilder()
.setHotelid(hotelid)
.setDate("This is Data")
.build();
responseObserver.onNext(Any.pack(htlDate));
responseObserver.onCompleted();
}
Run Code Online (Sandbox Code Playgroud)
我从 nodejs-gRPC-client 发出请求,代码是这样的:
function () {
var client = new services.RoomServiceClient('localhost:6565',
grpc.credentials.createInsecure());
var request = new messages.Hotelid();
var hotelid = "ignore";
request.setHotelid(hotelid);
var call = client.getTestAny(request, function (err, response) {
var obj = response.toObject();
console.log(obj);
});
}
Run Code Online (Sandbox Code Playgroud)
nodejs-gRPC-client 中的响应是 Any 类型。它包含一个数据数组:
array:["type.googleapis.com/HtlInDate", Uint8Array[10,17,10...]]
Run Code Online (Sandbox Code Playgroud)
我尝试使用response.toObject()来获取 HtlInDate 实例,但我只是这样:
obj:{
typeUrl:"type.googleapis.com/HtlInDate",
value:"ChEKD1RoaXMgaXMgSG90ZWxpZBIMVGhpcyBpcyBEYXRh"
}Run Code Online (Sandbox Code Playgroud)
那么如何解压 Any 类型的响应并准确获取 HtlInDate 实例呢?如果您对此有任何想法,非常感谢!
目前,google.protobuf.AnyNode.js 不支持该类型,无论是 gRPC 默认使用的 Protobuf.js,还是官方第一方 protobuf 实现的 google-protobuf。
| 归档时间: |
|
| 查看次数: |
2006 次 |
| 最近记录: |