【问题标题】:storing client connection on bidirectional call在双向调用中存储客户端连接
【发布时间】:2018-09-26 14:47:55
【问题描述】:

我有简单的双向rpc proto接口,如:

rpc RouteData(stream RouteNote) returns (stream ProcessedRouteNote) {} 

问题是我可能需要一段时间才能返回ProcessedRouteNote

我想知道存储连接的客户端的推荐方法是什么,以便稍后我可以流回响应(即“ProcessedRouteNote”)?

"def RouteData(self, request_iterator, servicer_context)"

似乎保存“def RouteData”的“request_iterator”,即“RpcMethodHandler”,然后直接调用stream_stream就可以了。

将感谢任何反馈。

我可以通过询问进一步简化这个问题:我怎样才能将数据/响应发送到先前已向服务器发送请求(双向)的特定客户端?应该注意的是,其目的不是在服务器的 RPC 处理程序的上下文中发送响应。此外,可能有十几个请求,但只有一个响应。所以我没有兴趣阻止 RPC 处理程序等待响应。我真的希望 grpc 可以做到这一点,否则这对我们来说真的是一个交易破坏者。

谢谢, 迈克

【问题讨论】:

    标签: python protocol-buffers grpc


    【解决方案1】:

    您可以让生成器产生响应值并等待threading.Event 对象触发,该对象可能存储在某个哈希表中,具体取决于您的应用程序逻辑。

    【讨论】:

    • 这不是我要寻找的答案。我希望能够从不同的上下文一起发送回复 - 不同的线程,不同的功能。我不想通过等待事件来阻塞 RPC 线程(我仍然希望在准备响应时获得更多请求)。
    • @Mike 当前的 gRPC Python 服务处理程序 API 不是异步的,所以很遗憾,除了写入时,每个请求都会消耗一个线程。
    • 好吧,这个问题与请求-重放对无关,因此请求处理程序不需要异步。这个问题与发送不必绑定到某个请求的数据有关。同样,我正在寻找一种将数据发送到某个客户端的方法,而不是在服务处理程序的上下文中,可能通过保存请求迭代器(可访问并在 RPC 请求处理程序中传递)或其他一些客户端上下文
    猜你喜欢
    • 2012-09-19
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2019-10-05
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    相关资源
    最近更新 更多