2017-05-03 4 views

答えて

1

いるProtobufは、実際には2つの区別はありません!次の2つのメッセージを考えてみましょう。

message Foo { 
    int32 foo = 5; 
} 

message Bar { 
    int32 bar = 5; 
} 

これらのメッセージはまったく同じように見えます。その理由は、メッセージにスキーマが含まれていないためです。これにより、メッセージがよりコンパクトで処理が速くなり、軽微な欠点が誤って解釈される可能性があります。

gRPCを使用している場合、メッセージは同じように表示される場合がありますが、送信されるサービスによって区別することができます。たとえば、次のようにメッセージを送信するとき

service MyService { 
    rpc EatTheFoo(Foo) returns (Bar); 
} 
service YourService { 
    rpc GoToTheBar(Bar) returns (foo); 
} 

は、両方のサービスを取ると同じように表示されるメッセージを受信した場合でも、gRPCは、サービスとメッセージの名前が含まれます。

その後、 Fooメッセージが続いている

POST /MyService/EatTheFoo HTTP/2

:ボンネットの下に、それは次のようになりますHTTP/2リクエストに変わります。誤って誰かがBarメッセージを送信しようとした場合、サーバーはメソッド名が間違っていることを確認し、RPCを拒否します。したがって、誤解される可能性はかなり小さいです。

+0

ありがとうございました。それはとてもうまく説明します。 – Theodor

関連する問題