gpt4 book ai didi

grpc - onComplete/onCancel 保证用 grpc 调用吗?

转载 作者:行者123 更新时间:2023-12-05 03:06:44 25 4
gpt4 key购买 nike

我应该在我的 grpc 服务器处理的每个调用的开始和结束时执行一些代码。

我使用 ServerCall.Listener:

  • 调用开始时执行的代码位于监听器的构造函数中
  • 在调用结束时执行的代码由 onComplete 和 onCancel 触发
  • 实例化监听器的线程必须是将调用 onComplete/onCancel 的线程(我们正在使用线程局部变量)

监听器由注册到我的服务器的拦截器实例化。

但有一个问题:有时,即使监听器已被实例化,它之后也不会调用 onComplete 或 onCancel。

为了完全准确,如果另一个线程而不是实例化监听器的线程正在调用 onComplete/onCancel,也可能会触发该问题。

其中一种情况应该发生吗?我正在使用 grpc-netty 版本 1.6.1。

谢谢你的帮助!

最佳答案

保证只会调用 onComplete/onCancel 之一。

问题是“实例化监听器的线程必须是将调用 onComplete/onCancel 的线程”。由于多种原因,这通常不是真的:

  1. 监听器创建发生在发送线程上,而回调发生在单独的接收线程上。
  2. 接收线程不是专用线程:它是共享的,可以在回调之间切换。

Listener 不需要是线程安全的,但应该是线程兼容的。您当前的实现 is thread-hostile .

今天您的假设唯一成立的时间是使用阻塞 stub 时。但那是因为您不应该依赖一个实现细节。

关于grpc - onComplete/onCancel 保证用 grpc 调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48884032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com