@@ -14,7 +14,9 @@ mapping a call onto a stream and dealing with serialization. The highest level
1414of abstraction is the _ stub_ layer which provides client and server interfaces
1515generated from an interface definition language (IDL).
1616
17- ## Transport
17+ ## Overview
18+
19+ ### Transport
1820
1921The transport layer provides a bidirectional communication channel with a remote
2022peer which is typically long-lived.
@@ -42,7 +44,7 @@ The vast majority of users won't need to implement either of these protocols.
4244However, many users will need to create instances of types conforming to these
4345protocols to create a server or client, respectively.
4446
45- ### Server transport
47+ #### Server transport
4648
4749The `` ServerTransport `` is responsible for the server half of a transport. It
4850listens for new gRPC streams and then processes them. This is achieved via the
@@ -57,7 +59,7 @@ Note that the server transport doesn't include the idea of a "connection". While
5759an HTTP/2 server transport will in all likelihood have multiple connections open
5860at any given time, that detail isn't surfaced at this level of abstraction.
5961
60- ### Client transport
62+ #### Client transport
6163
6264While the server is responsible for handling streams, the `` ClientTransport `` is
6365responsible for creating them. Client transports will typically maintain a
@@ -83,7 +85,7 @@ may be retried. Some of this is exposed via the ``ClientTransport`` as
8385the `` ClientTransport/retryThrottle `` and
8486`` ClientTransport/config(forMethod:) `` .
8587
86- ### Streams
88+ #### Streams
8789
8890Both client and server transport protocols use `` RPCStream `` to represent
8991streams of information. Each RPC can be thought of as having two logical
@@ -122,7 +124,7 @@ and indicates the final outcome of an RPC. It includes a ``Status/Code-swift.str
122124and string describing the final outcome while the `` Metadata `` may contain additional
123125information about the RPC.
124126
125- ## Call
127+ ### Call
126128
127129The "call" layer builds on top the transport layer to map higher level RPCs calls on
128130to streams. It also implements transport-agnostic functionality, like serialization
@@ -139,7 +141,7 @@ provides support for [SwiftProtobuf](https://github.com/apple/swift-protobuf) by
139141implementing serializers and a code generator for the Protocol Buffers
140142compiler, ` protoc ` .
141143
142- ### Interceptors
144+ #### Interceptors
143145
144146This layer also provides client and server interceptors allowing you to modify requests
145147and responses between the caller and the network. These are implemented as
@@ -152,7 +154,7 @@ Naturally, the interceptors APIs are `async`.
152154Interceptors are registered directly with the `` GRPCClient `` and `` GRPCServer `` and
153155can either be applied to all RPCs or to specific services.
154156
155- ### Client
157+ #### Client
156158
157159The call layer includes a concrete `` GRPCClient `` which provides API to execute all
158160four types of RPC against a `` ClientTransport `` . These methods are:
@@ -178,7 +180,7 @@ which will stop new RPCs from starting (by failing them with
178180Existing work can be stopped more abruptly by cancelling the task where
179181`` GRPCClient/run() `` is executing.
180182
181- ### Server
183+ #### Server
182184
183185`` GRPCServer `` is provided by the call layer to host services for a given
184186transport. Beyond creating the server it has a very limited API surface: it has
@@ -188,7 +190,7 @@ can initiate graceful shutdown by calling ``GRPCServer/beginGracefulShutdown()``
188190which will stop new RPCs from being handled but will let existing RPCs run to
189191completion. Cancelling the task will close the server more abruptly.
190192
191- ## Stub
193+ ### Stub
192194
193195The stub layer is the layer which most users interact with. It provides service
194196specific interfaces generated from an interface definition language (IDL) such
@@ -204,7 +206,7 @@ However, the stub layer is optional, users may choose to not use it and
204206construct clients and services manually. A gRPC proxy, for example, would not
205207use the stub layer.
206208
207- ### Server stubs
209+ #### Server stubs
208210
209211Users implement services by conforming a type to a generated service ` protocol ` .
210212Each service has three protocols generated for it:
@@ -308,7 +310,7 @@ refines the ``RegistrableRPCService`` protocol. This `protocol` has a single
308310requirement for registering methods with an `` RPCRouter `` . A default
309311implementation of this method is also provided.
310312
311- ### Client stubs
313+ #### Client stubs
312314
313315Generated client code is split into a ` protocol ` and a concrete ` struct `
314316implementing the ` protocol ` . An example of the client protocol is:
0 commit comments