我是gRPC的新手。我试图遵循example code(我们必须使用版本gRPC v1.38),以实现异步gRPC服务器,因为服务器将向gRPC客户端发送多个响应(又名流)。
proto类似于:
rpc MyRequest (ReqMsg) returns (stream RespMsg)
基本上,当gRPC服务器接收到客户端请求时,它需要从其他地方 * 异步 * 获取信息。当所需的信息返回时(通过不同线程的回调,但多次),回调函数然后使用CallData
,aka,responder等中维护的数据结构 * 写回 * 响应。
在我的测试中,我的gRPC服务器在写回2或3个响应后在proto_buffer_writer.h assertion failed !byte_buffer->Valid()
崩溃。我想知道是否是由于diff线程(除了等待gRPC通信的线程)正在进行写入。
1条答案
按热度按时间0h4hbjxa1#
问题已解决。崩溃的原因是当发送回多个响应(又名流)时,我的服务器在发送新响应之前没有等待令牌可用。