当使用grpc异步接口时,服务器端流涉及服务器端代码上的三个主要步骤:
服务器开始侦听stream.
ServerAsyncWriter::Write.
ServerAsyncWriter::Finish.。
如果我希望取消服务器端的RPC,理论上我可以通过grpc::ServerContext::TryCancel实现这一点。但是,只有在第1阶段完成后才能调用TryCancel。例如,如果客户端从未请求启动流,那么步骤1永远不会完成。在这种情况下,除了关闭整个服务器之外,无法取消请求。
我试着在流开始之前调用grpc::ServerContext::TryCancel,这会导致访问冲突。
那么,在这种情况下,如何取消服务器端的RPC呢?
发布于 2022-11-12 01:20:45
您无法在步骤2之前获得grpc::ServerContext实例,因此您似乎使用了错误的grpc::ServerContext实例。gRPC没有办法撤销第一步。(我在这里使用撤销,因为只有当有相应的请求时,cancel谓词在gRPC中才有意义),如果需要,可以关闭服务器来撤消它。
https://stackoverflow.com/questions/74172666
复制相似问题