gRPC-Web + WSGI
项目描述
gRPC-WSGI
一个基于Python WSGI标准的gRPC-Web实现。
为什么?
gRPC有很多优点,但在某些环境中使用起来有些笨拙。gRPC-WSGI使得在需要使用HTTP/1.1负载均衡器或代理,或者想要将gRPC集成到现有的服务中(如Django或Flask应用,这些应用大多数时间使用不同的协议)时,可以轻松地集成gRPC。
此实现相较于谷歌的实现具有两个主要功能。
- 通过gRPC-Web实现HTTP/1.1兼容性,甚至对于使用protobuf的单例流RPC。无需像Envoy这样的旁路代理进程。
- 在同一套接字上运行gRPC和其他HTTP内容。
如何?
gRPC-WSGI旨在对现有的WSGI或gRPC代码库进行最小的修改。
服务器
通常,一个WSGI应用程序(如您喜欢的Django应用程序)将调用
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
以便您的应用程序服务器(uWSGI,Gunicorn等)知道您的代码在哪里。
要将gRPC-WSGI添加到上述类似的应用程序,您只需执行以下操作即可启用它。
from django.core.wsgi import get_wsgi_application
from grpcWSGI.server import grpcWSGI
application = get_wsgi_application()
application = grpcWSGI(application)
grpcWSGI应用程序对象也恰好与正常的grpc.Server接口兼容。因此,您实际上需要执行的操作是将您的RPC附加到并开始调用您的新服务的常规gRPC设置,例如。
helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), application)
现在,您有一个结合了HTTP/1.1 Django + gRPC应用程序,全部位于单个端口下。
客户端
设置客户端同样非常简单,类似于标准的gRPC调用。
我们不是使用gRPC原生的insecure_channel
API,而是使用grpcWSGI.client.insecure_web_channel
,它提供了一个由https://github.com/kennethreitz/requests驱动的客户端通道,用于gRPC-Web服务器。例如:
import gRPCWSGI.client
with grpcWSGI.client.insecure_web_channel(
f"http://localhost:8080"
) as channel:
stub = helloworld_pb2_grpc.GreeterStub(channel)
print(stub.SayHello("world"))
待办事项
- 错误处理
- 压缩吗?
- 基准测试?
- 清理CORS相关的内容。
- StreamStream/StreamUnary RPC?
- 重试、缓存和其他客户端选项。
- Django、Flask等的生活质量集成。
- 支持application/grpc-web-text吗?我关心IE10吗?有时JSON比Protobuf快...
- aiohttp / grpc-aiohttp / ASGI集成?
- MyPy注解? https://github.com/dropbox/mypy-protobuf 已经做得相当好了。
- 更多地使用grpc包中的ABC和其他标准内容。
- 使分块编码支持稍微可靠一些。
- 某种元类魔法,以便更容易确保你实际上实现了服务器的接口。
项目详情
下载文件
下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
grpcWSGI-0.0.4.tar.gz (7.9 kB 查看散列)
构建分发
grpcWSGI-0.0.4-py2.py3-none-any.whl (11.9 kB 查看散列)
关闭
grpcWSGI-0.0.4.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 5dd70c83b6b3ba44f711733c099d7a323fe5815d5d032747a594348d16ab894a |
|
MD5 | 326df83201b401fc1571e5ad5428c805 |
|
BLAKE2b-256 | a3973cfe9023257aee9b09d5cdb3bafe9cdba28ff141dd13d1fee94c318a0191 |
关闭
grpcWSGI-0.0.4-py2.py3-none-any.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 0f59db87573f3954496450fd85464f9f3f54caf7b6b9a2824ad521ea957c9d32 |
|
MD5 | 424b2b3bf196256ea0fecda5336dfb50 |
|
BLAKE2b-256 | 709603810df4f733113e7e790b2a6f07074db2e247dde52d8c9de56d723b9eb6 |