Я использую клиент-серверную среду gRPC в одном из моих приложений (распознавание речи).Есть несколько важных вещей, которые я хочу уточнить своими наблюдениями.
1.Как отправляется необязательное поле данных, когда оно не заполняется клиентом?
Давайте рассмотрим следующий пример: (предположим, что proto3 используется, поэтому все поля являются необязательными по умолчанию)
service NameStudent {
rpc GetRoll(Student) returns (Details) {}
}
#Student'd details
message Student{
int32 roll = 1;
string name = 2;
string gender = 4;
int32 age = 3;
DOB dateofbirth = 5;
}
#Students Date of Birth
message DOB {
int32 dd = 1;
int32 mm = 2;
int32 yy = 3;
}
#Parent's details
message Parent{
string parent =1;
}
#Students all details (includes student + parent)
message Details {
Student student = 1;
Parent parent = 4;
}
Предположим, что служба берет (данные от клиента) некоторые из сведений об ученике , например, список, имя и возраст, и верните (все) данные этого студента
, поэтому теперь, если вместо отправки всех 3-х деталей (например, имя, возраст и возраст), могут быть отправлены даже одна или две детали и (логически предположим, что)служба работает.
В таких случаях сервер получит все поля (с пробелами / пустыми значениями для пропущенных полей) или клиент не отправит , что вообще пропустило информацию? (см. Ниже представления двоичных данных , отправленные с клиента)
// roll and name filled
// age is left blank
// gender and DOB are always sent blank from client
{
roll: 170012,
name: "John Doe",
age: ,
gender: "",
dateofbirth: {
dd: ,
mm: ,
yy:
}
}
ИЛИ
//only roll and name is sent and rest is just not sent
{
roll: 170012,
name: "John Doe"
}
2.Можно ли подключить одну заглушку для двух служб?
Если сервер предлагает 2 службы, а я создаю заглушку клиента, смогу ли я подключить 2 канала от одной заглушки кодин и тот же сервер, имеющий доступ к двум его службам?