#javascript #node.js #grpc #grpc-node
Вопрос:
Я только недавно начал экспериментировать с gRCP и в настоящее время пытаюсь понять, как это работает, используя node-js для создания простого примера . Однако после создания протокола, который будет использоваться как между клиентом, так и между сервером . Один из моих методов rpc не был вызван . Я добавил ниже конкретный метод, который не вызывался вместе со спецификацией сообщения в .proto
файле .Я также привел ниже пример как клиентского вызова, так и обработчика на стороне сервера.
.прото
service WeatherService{
rpc RetrieveAllWeather (void) returns (Temp);
}
message void{}
message Temp{
string msg =1;
}
server.js
// .... server configuration
server.addService(weather_proto.WeatherService.service,
{
"RetrieveAllWeather":RetrieveAllWeather,
"RetrieveWeatherByQuery":RetrieveWeatherByQuery,
"SaveWeatherToFile":SaveWeatherToFile,
}
);
server.bindAsync(
"127.0.0.1:4000",
grpc.ServerCredentials.createInsecure(),
(err,port)=>{
if(err){
console.error(err);
process.exit(1);
}
console.log("Listening on port " port)
server.start();
}
);
function RetrieveAllWeather(call,callback){
console.log(call);
console.log("working");
callback(null,"call");
}
client.js
const client = new weather_proto.WeatherService(
"127.0.0.1:4000",grpc.credentials.createInsecure()
);
client.RetrieveAllWeather({},(err,res)=>{
if(err){
return err;
}
console.log("working");
console.log(JSON.stringify(res));
});
Кажется, потому что я пытаюсь указать, RetrieveAllWeather
чтобы ничего не принимать в качестве полезной нагрузки и отправлять json {msg:"call"}
, но это не работает, в то время как работают другие созданные мной методы .
Ответ №1:
Похоже , что использование void
соглашения об именовании сообщений было причиной ошибки, когда я переключился на использование заглавного имени для спецификации сообщения, оно начало работать . Все, что я сделал, это перешел с message void{}
на message Void{}