取消
解释如何以及何时取消 RPC。
概述
当 gRPC 客户端不再关心 RPC 调用的结果时,可以取消该调用,以向服务器发出终止关注的信号。截止时间到期和 I/O 错误也会触发取消。当 RPC 被取消时,服务器应停止正在进行的计算并结束其流的处理。通常,服务器本身也是上游服务器的客户端,因此取消操作应理想地传播到系统中所有由于原始客户端 RPC 调用而启动的正在进行的计算。
客户端可能出于多个原因取消 RPC。请求的数据可能已经变得不再相关,或者客户端的作者希望作为服务器的良好公民来节约计算资源。

在客户端取消 RPC 调用
客户端通过调用调用对象上的方法,或者在某些语言中通过调用附带的上下文对象上的方法来取消 RPC 调用。虽然 gRPC 客户端不会向服务器提供关于取消原因的详细信息,但取消 API 调用时会传入一个描述原因的字符串,这将导致客户端抛出异常和/或记录日志,日志中包含所提供的原因。当服务器收到 RPC 被取消的通知时,应用程序提供的服务器处理程序可能正在忙于处理请求。一般来说,gRPC 库没有中断应用程序提供的服务器处理程序的机制,因此,服务器处理程序必须与 gRPC 库协调,以确保本地请求处理的停止。因此,如果 RPC 是长期存在的,其服务器处理程序必须定期检查它所服务的 RPC 是否已被取消,如果已取消,则停止处理。一些语言会自动取消任何传出的 RPC,而在其他语言中,服务器处理程序的作者则需要负责这一操作。
