@@ -160,6 +160,12 @@ service Echo {
160
160
}
161
161
```
162
162
163
+ Generate echo proto file:
164
+
165
+ ```
166
+ python -m grpc_tools.protoc -I . --python_betterproto_out=. echo.proto
167
+ ```
168
+
163
169
A client can be implemented as follows:
164
170
``` python
165
171
import asyncio
@@ -199,28 +205,29 @@ To use them, simply subclass the base class in the generated files and override
199
205
service methods:
200
206
201
207
``` python
202
- from echo import EchoBase
208
+ import asyncio
209
+ from echo import EchoBase, EchoResponse, EchoStreamResponse
203
210
from grpclib.server import Server
204
211
from typing import AsyncIterator
205
212
206
213
207
214
class EchoService (EchoBase ):
208
215
async def echo (self , value : str , extra_times : int ) -> " EchoResponse" :
209
- return value
216
+ return EchoResponse([ value for _ in range (extra_times)])
210
217
211
- async def echo_stream (
212
- self , value : str , extra_times : int
213
- ) -> AsyncIterator[" EchoStreamResponse" ]:
218
+ async def echo_stream (self , value : str , extra_times : int ) -> AsyncIterator[" EchoStreamResponse" ]:
214
219
for _ in range (extra_times):
215
- yield value
220
+ yield EchoStreamResponse( value)
216
221
217
222
218
- async def start_server ():
219
- HOST = " 127.0.0.1"
220
- PORT = 1337
223
+ async def main ():
221
224
server = Server([EchoService()])
222
- await server.start(HOST , PORT )
223
- await server.serve_forever()
225
+ await server.start(" 127.0.0.1" , 50051 )
226
+ await server.wait_closed()
227
+
228
+ if __name__ == ' __main__' :
229
+ loop = asyncio.get_event_loop()
230
+ loop.run_until_complete(main())
224
231
```
225
232
226
233
### JSON
0 commit comments