@@ -14,7 +14,9 @@ mapping a call onto a stream and dealing with serialization. The highest level
14
14
of abstraction is the _ stub_ layer which provides client and server interfaces
15
15
generated from an interface definition language (IDL).
16
16
17
- ## Transport
17
+ ## Overview
18
+
19
+ ### Transport
18
20
19
21
The transport layer provides a bidirectional communication channel with a remote
20
22
peer which is typically long-lived.
@@ -42,7 +44,7 @@ The vast majority of users won't need to implement either of these protocols.
42
44
However, many users will need to create instances of types conforming to these
43
45
protocols to create a server or client, respectively.
44
46
45
- ### Server transport
47
+ #### Server transport
46
48
47
49
The `` ServerTransport `` is responsible for the server half of a transport. It
48
50
listens 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
57
59
an HTTP/2 server transport will in all likelihood have multiple connections open
58
60
at any given time, that detail isn't surfaced at this level of abstraction.
59
61
60
- ### Client transport
62
+ #### Client transport
61
63
62
64
While the server is responsible for handling streams, the `` ClientTransport `` is
63
65
responsible 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
83
85
the `` ClientTransport/retryThrottle `` and
84
86
`` ClientTransport/config(forMethod:) `` .
85
87
86
- ### Streams
88
+ #### Streams
87
89
88
90
Both client and server transport protocols use `` RPCStream `` to represent
89
91
streams 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
122
124
and string describing the final outcome while the `` Metadata `` may contain additional
123
125
information about the RPC.
124
126
125
- ## Call
127
+ ### Call
126
128
127
129
The "call" layer builds on top the transport layer to map higher level RPCs calls on
128
130
to streams. It also implements transport-agnostic functionality, like serialization
@@ -139,7 +141,7 @@ provides support for [SwiftProtobuf](https://github.com/apple/swift-protobuf) by
139
141
implementing serializers and a code generator for the Protocol Buffers
140
142
compiler, ` protoc ` .
141
143
142
- ### Interceptors
144
+ #### Interceptors
143
145
144
146
This layer also provides client and server interceptors allowing you to modify requests
145
147
and responses between the caller and the network. These are implemented as
@@ -152,7 +154,7 @@ Naturally, the interceptors APIs are `async`.
152
154
Interceptors are registered directly with the `` GRPCClient `` and `` GRPCServer `` and
153
155
can either be applied to all RPCs or to specific services.
154
156
155
- ### Client
157
+ #### Client
156
158
157
159
The call layer includes a concrete `` GRPCClient `` which provides API to execute all
158
160
four types of RPC against a `` ClientTransport `` . These methods are:
@@ -178,7 +180,7 @@ which will stop new RPCs from starting (by failing them with
178
180
Existing work can be stopped more abruptly by cancelling the task where
179
181
`` GRPCClient/run() `` is executing.
180
182
181
- ### Server
183
+ #### Server
182
184
183
185
`` GRPCServer `` is provided by the call layer to host services for a given
184
186
transport. 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()``
188
190
which will stop new RPCs from being handled but will let existing RPCs run to
189
191
completion. Cancelling the task will close the server more abruptly.
190
192
191
- ## Stub
193
+ ### Stub
192
194
193
195
The stub layer is the layer which most users interact with. It provides service
194
196
specific 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
204
206
construct clients and services manually. A gRPC proxy, for example, would not
205
207
use the stub layer.
206
208
207
- ### Server stubs
209
+ #### Server stubs
208
210
209
211
Users implement services by conforming a type to a generated service ` protocol ` .
210
212
Each service has three protocols generated for it:
@@ -308,7 +310,7 @@ refines the ``RegistrableRPCService`` protocol. This `protocol` has a single
308
310
requirement for registering methods with an `` RPCRouter `` . A default
309
311
implementation of this method is also provided.
310
312
311
- ### Client stubs
313
+ #### Client stubs
312
314
313
315
Generated client code is split into a ` protocol ` and a concrete ` struct `
314
316
implementing the ` protocol ` . An example of the client protocol is:
0 commit comments