我正在尝试创建一个grpc
python服务器,该服务器可以跟踪所有连接的客户端。
我所指的是曾荫权(Ray Tsang)所做的一次谈话/演示,他在那里收集了StreamObservers
的集合,并只是遍历它们以发送给所有客户。这是其中的video供参考。
现在我的问题是如何在python中获得StreamObserver
?我只在定义中看到self
,request
和context
对我可用。
这是我的第一个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;
}
答案 0 :(得分:0)
如果我了解您需要创建一个扩展grpc.UnaryUnaryClientInterceptor(https://grpc.io/grpc/python/grpc.html?highlight=unaryunaryclientinterceptor#grpc.UnaryUnaryClientInterceptor)的类ClientInterceptor 然后以这种方式将其分配给exclude_channel方法
self.channel = grpc.insecure_channel(address, options)
self.channel = grpc.intercept_channel(
self.channel,
ClientInterceptor()
)
您可以使用intercept_unary_unary方法接收有关各种客户端的信息。
如果要让信息服务器端扩展ServerInterceptor(https://grpc.io/grpc/python/grpc.html?highlight=serverinterceptor#grpc.ServerInterceptor)并将其分配到服务器init上
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方法接收信息。
答案 1 :(得分:0)
您可能需要的是双向流服务。那就是客户端和服务器都在不断发送数据。在这种情况下,gRPC + python将跟踪您的客户端! 查看this示例代码和相应的explanation。