【问题标题】:Keeping track of multiple clients on grpc server跟踪 grpc 服务器上的多个客户端
【发布时间】:2018-07-18 15:35:22
【问题描述】:

我正在尝试创建一个grpc python 服务器,它可以跟踪所有连接的客户端。

我引用了 Ray Tsang 所做的一个谈话/演示,他保存了 StreamObservers 的集合,并只是遍历它们以发送给所有客户。这是一个video 供参考。

现在我的问题是如何在 python 中获得StreamObserver?我只看到 selfrequestcontext 在定义中可供我使用。

这是我的第一个 python 项目,所以我可能在这里遗漏了一些明显的东西。

这是我的原型,它基本上是示例原型

syntax = "proto3";

package hellostreamingworld;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Sends another greeting
  rpc SayHelloAgain (HelloRequest) returns (stream HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

【问题讨论】:

  • 这看起来不像 Python 语法。您可能应该从那里开始。
  • 只是为了理解你的目标...... grpc 是一个可以在 python 中使用的框架,在他们的官方网站上你可以按照 python 入门指南来解释如何安装/交互(看这里@ “python”下的987654322@),你已经这样做了吗?
  • @ChenA。我没有说那是 python 语法,我说那是我的 proto 文件,用于 grpc 框架。问题是如何使用 python grpc 跟踪多个客户端
  • @Legion 我安装/使用 grpc 没有问题我只是想了解如何跟踪多个客户端,就像视频中的 java 示例一样。我没有看到任何StreamObserver 或知道如何在 python 中访问一个

标签: python grpc grpc-python


【解决方案1】:

如果我了解您需要创建一个扩展 grpc.UnaryUnaryClientInterceptor(https://grpc.io/grpc/python/grpc.html?highlight=unaryunaryclientinterceptor#grpc.UnaryUnaryClientInterceptor) 的类 ClientInterceptor 然后以这种方式用intercept_channel方法赋值

self.channel = grpc.insecure_channel(address, options)

self.channel = grpc.intercept_channel(
     self.channel,
     ClientInterceptor()
)

您可以使用 intercept_unary_unary 方法接收有关各种客户端的信息。

如果你想让 infos 服务器端扩展 ServerInterceptor(https://grpc.io/grpc/python/grpc.html?highlight=serverinterceptor#grpc.ServerInterceptor) 并在服务器初始化上分配它

self.server = grpc.server(futures.ThreadPoolExecutor(max_workers=1000),
                          options=(('grpc.max_send_message_length', 1000 * 1024 * 1024,),
                                   ('grpc.max_receive_message_length', 1000 * 1024 * 1024,),
                                  ),
                          interceptors=(MyServerInterceptor())
                         )

并使用intercept_service方法接收信息。

【讨论】:

    【解决方案2】:

    您可能需要的是双向流服务。那就是客户端和服务器都在不断地发送数据。在这种情况下,gRPC + python 将跟踪您的客户端! 查看this 示例代码和对应的explanation

    【讨论】:

      猜你喜欢
      • 2016-07-07
      • 1970-01-01
      • 2014-07-04
      • 2017-05-28
      • 1970-01-01
      • 2018-07-24
      • 2011-05-22
      • 1970-01-01
      • 2022-10-05
      相关资源
      最近更新 更多