跳转到主要内容

gRPC-Web + WSGI

项目描述

CircleCI

gRPC-WSGI

一个基于Python WSGI标准的gRPC-Web实现。

为什么?

gRPC有很多优点,但在某些环境中使用起来有些笨拙。gRPC-WSGI使得在需要使用HTTP/1.1负载均衡器或代理,或者想要将gRPC集成到现有的服务中(如Django或Flask应用,这些应用大多数时间使用不同的协议)时,可以轻松地集成gRPC。

此实现相较于谷歌的实现具有两个主要功能。

  1. 通过gRPC-Web实现HTTP/1.1兼容性,甚至对于使用protobuf的单例流RPC。无需像Envoy这样的旁路代理进程。
  2. 在同一套接字上运行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 查看散列)

上传时间: Python 2 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面