gRPC
gRPC is Google remote procedure call library, it uses Protocol Buffers (Protobufs or Protos) as its core data format. It supports unary and streaming for both the client and server. Within Echelon, assets are typically gRPC servers and the frontend acts as the client. Often other drones are clients as well but they should all support being a gRPC server.
The main three permutations used by Echelon are
Unary Request, Unary Response
This is used to send commands to the asset, for example the request would be some waypoint data and the response would be a wilco (will comply) or rejection.
Unary Request, Streaming Response
This is generally used to ask for telemetry or some other update from the asset. Generally, the request will contain some limited information about what they wants about the telemetry (ie report rate for example). The asset will then return data until the client either closes the stream or it breaks from some external factor (ie. network failure)
You might ask why this isn't done over UDP, mainly its easier and good enough for now. Eventually it will make sense to support unreliable reporting given TCP gRPC isn't super cheap network wise.