3 min read
ice and duplex transports
Learn about the ice protocol and duplex transports
The ice protocol
When you create a client connection to server address ice://hello.zeroc.com
, you instruct IceRPC to establish a connection that uses the ice protocol.
ice is an application layer protocol that transmits RPCs (requests and responses) over a duplex connection.
Duplex transport
The duplex transport page describes an abstraction for a traditional transport like TCP or RFCOMM. It creates duplex (transport) connections. A duplex connection provides two byte streams: one from the client to the server, and another from the server to the client.
An ice connection runs over a duplex connection.
The ice protocol sends requests and responses over a duplex connection by writing requests and responses one after the other. Each request or response is always fully written: when you send a request or response with ice, the sending of another request or response in the same direction will wait until after this request or response is fully written.
This serialization can result in head-of-line blocking.
If you send requests and responses concurrently over the same ice connection, make sure that all these requests and responses are fairly small. And if you can't avoid sending large requests or responses, you should consider creating a separate ice connection dedicated to these large requests or responses.
Limitations of the ice protocol
The following IceRPC features are not available with the ice protocol:
- payload continuations
- request fields other than Context and Idempotent
- response fields
- status codes other than
Ok
,ApplicationError
,NotFound
,NotImplemented
andInternalError