GRPC-网络+wsgi

grpcWSG的Python项目详细描述


CircleCI

GRPC wsgi

基于python的wsgi标准的grpc web实现。

为什么?

grpc有很多优点,但在某些环境中使用起来很困难。GRPC WSGI使得当您需要使用HTTP/1.1负载平衡器或代理时,很容易集成GRPC,或者希望将GRPC集成到现有的服务中,例如Django或烧瓶应用程序,这些应用程序大部分时间讲不同的协议。

与谷歌相比,这个实现有两个主要功能。

  1. 通过GRPC Web的HTTP/1.1兼容性,即使对于使用Protobuf的一元流RPC也是如此。不需要像特使这样的边车代理过程。
  2. 在同一个套接字上运行grpc和其他http文件。

怎么做?

GRPC WSGI的设计要求对现有的WSGI或GRPC代码库进行最少的更改。

服务器

通常,wsgi应用程序(例如您最喜欢的django应用程序)会调用诸如

fromdjango.core.wsgiimportget_wsgi_applicationapplication=get_wsgi_application()

这样你的应用服务器(uwsgi,gunicorn等)就知道你的代码在哪里了。

要将grpc wsgi添加到像上面这样的应用程序中,您需要做的就是启用它。

fromdjango.core.wsgiimportget_wsgi_applicationfromgrpcWSGI.serverimportgrpcWSGIapplication=get_wsgi_application()application=grpcWSGI(application)

grpcwsgi应用程序对象也碰巧与正常的grpc.server接口兼容。 因此,您所需要做的就是连接您的rpc并开始拨打您的新服务,这是通常的grpc设置,例如

helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(),application)

现在您有一个组合的http/1.1django+grpc应用程序,所有这些都在一个端口下。

客户

设置客户机同样非常简单,与标准grpc调用类似。

我们没有使用grpcs本机insecure_channelapi,而是使用grpcWSGI.client.insecure_web_channel提供一个https://github.com/kennethreitz/requests支持的客户端通道到grpc web服务器。例如

importgRPCWSGI.clientwithgrpcWSGI.client.insecure_web_channel(f"http://localhost:8080")aschannel:stub=helloworld_pb2_grpc.GreeterStub(channel)print(stub.SayHello("world"))

待办事项

  • 错误处理
  • 压缩?
  • 基准?
  • 把球衣清理干净。
  • streamstream/stream一元rpc?
  • 重试、缓存和其他客户端选项。
  • Django、烧瓶等的生活质量集成。
  • 应用程序/GRPC Web文本支持?我在乎IE10吗?json有时可能比protobuf快……
  • aiohttp/grpc aiohttp/asgi集成?
  • 我的注释?https://github.com/dropbox/mypy-protobuf已经很好了。
  • 使用GRPC软件包中的更多ABC和其他标准资料
  • 支持模糊可靠的分块编码
  • 某种元类魔术,使您更容易确保实际实现了服务器接口

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法排序。如何按名称对对象列表进行排序?   java Im正在尝试使用setcolumnwidth在excel 2010上设置列宽   java如何使Axis1.4不为同一个XML名称空间生成多个前缀?   Java:排序索引数组   Java Swing BasicStroke向左偏小   在Android中使用Niimbot蓝牙打印机进行java打印   java阻止tomcat记录特定异常   在将对象的引用变量用作形式参数的情况下,java无法在实际参数中传递该对象的引用变量   java如何在OkHttpClient中设置整个超时?   java中的数组最小/最大lambda表达式   java寻找合适的逻辑   java Jackson JSON处理器故障   java如何合并两个web项目?   java如何使由两个不同图形对象绘制的两个对象相交?   java我应该以什么方式测试更新方法?   java如何建立到的socket连接。在Android Studio上使用SilverTunnelNG的洋葱url?还有别的选择吗?   javajavax。坚持不懈坚持不懈getPersistenceUtil()Ljavax/persistence/PersistenceUtil   带有SuperCSV的CSV文件中的java Skip可选标头