gRPC
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ
ΠΠΎΠΌΠΈΠΌΠΎ batch-Π·Π°ΠΏΡΠΎΡΠΎΠ² (ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ, ΡΠ°ΠΊ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² JSON RPC), ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΡΠΈΠΌΠΈΠ½Π³ΠΎΠ²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ (ΠΊΠ°Π½Π°Π» Π½Π΅ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ, Π·Π°ΠΏΡΠΎΡΡ ΠΏΠΎΡΡΠ»Π°ΡΡΡΡ)
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ , ΡΠ°ΠΉΠΌΠ°ΡΡΠΎΠ² ΠΈ ΠΎΡΠΌΠ΅Π½Ρ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° (Π² HTTP Π½Π°ΠΌ ΡΠ°ΠΌΠΈΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈΠ΄ΡΠΌΠ°ΡΡ Π²ΡΡΠΊΠΈΠ΅ Request ID, ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠ΅ΡΡΠ°Π΅Π² ΠΈ ΡΠΏ). Π ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
ΠΠ»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΎΡΠΌΠ°ΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ IDL. Π’ΠΎ Π΅ΡΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°ΡΡ Π½Π°ΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊ Π½Π°ΠΌ ΡΠ΄ΠΎΠ±Π½ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· json ΠΈΠ»ΠΈ proto).
ΠΠΎΠ΄ΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΡ
ΠΡΡΡΡ Π΅ΡΡΡ ΠΊΡΡΠ° ΠΏΡΠΎΡΠΎΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ gRPC-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ²
web/
account/
some.proto
admin/
some.proto
...
ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΡΡΠ΅Π΄Ρ (python)
$ python3 -m venv .venv
$ source .venv/bin/activate
$ python -m pip install grpcio
$ python -m pip install grpcio-tools
ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ python-ΠΊΠΎΠ΄ (pb2 ΠΈ grpc ΠΊΠΎΠ΄)
python -m grpc_tools.protoc -I /full/path/to/proto/root/directory --python_out=. --grpc_python_out=. /full/path/to/proto/root/directory/web/*/*.proto
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΊΠΎΠ΄
$ python greeter_server.py
$ python greeter_client.py
gRPC ΠΊΠ»ΠΈΠ΅Π½ΡΡ
ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ gRPC API, Π½Π΅ ΠΈΠΌΠ΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ proto-ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΠ° ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΡ gRPC ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π΅Π½? https://github.com/ktr0731/evans
grpc_cli β Π°Π½Π°Π»ΠΎΠ³ curl Π΄Π»Ρ gRPC-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ²
Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π½Π° ΠΏΠΎΡΡΡ:
$ grpc_cli ls localhost:8080
ΠΠΎΠ΄ΡΠΎΠ±Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΡΠΎ ΡΠ΅ΡΠ²ΠΈΡ:
$ grpc_cli ls localhost:8080 helloworld.Greeter -l
ΠΠΎΠ΄ΡΠΎΠ±Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΡΠΎ ΠΌΠ΅ΡΠΎΠ΄:
$ grpc_cli ls localhost:8080 helloworld.Greeter.SayHello -l
ΠΠΎΠΊΠ°Π·Π°ΡΡ ΡΠΈΠΏΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ:
$ grpc_cli type localhost:8080 helloworld.HelloRequest
ΠΡΠΈΠΌΠ΅Ρ Π·Π°ΠΏΡΠΎΡΠ°:
$ grpc_cli call localhost:8080 SayHello "name: 'gRPC CLI'"
ΠΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ cli evans
ΠΠ½Π°Π»ΠΎΠ³ Postman/Insomnia β BloomRPC (Π½ΠΎ Π²ΡΠΎΠ΄Π΅ Postman ΡΠΆΠ΅ ΡΠΌΠ΅Π΅Ρ Π² gRPC).
grpcdump β Π΄Π»Ρ ΠΎΡΠ»ΠΎΠ²Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ gRPC Π·Π°ΠΏΡΠΎΡΠΎΠ²:
ΠΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ΅ΡΠ²ΠΈΡΡ Π½Π° ΠΏΠΎΡΡΡ 8080
$ grpcdump -i io -p 8080 -proto-path ./grpc/protofiles -proto-files helloworld.prot |
Last updated