C++ 如何在C+中向grpc完成队列添加事件+;?
我正在尝试实现一个异步GRPC服务器,每当客户端进行调用时,它都会得到一个不确定的消息流。我通读了官方文件。它不包括我希望为每个RPC保持流打开的场景。本条— 通过基本上将回调处理程序对象再次放入完成队列,解决了保持流打开的问题 文章建议:C++ 如何在C+中向grpc完成队列添加事件+;?,c++,grpc,C++,Grpc,我正在尝试实现一个异步GRPC服务器,每当客户端进行调用时,它都会得到一个不确定的消息流。我通读了官方文件。它不包括我希望为每个RPC保持流打开的场景。本条— 通过基本上将回调处理程序对象再次放入完成队列,解决了保持流打开的问题 文章建议: if (HasData()) { responder_.Write(reply_, this); } else { grpc::Alarm alarm; alarm.Set(completion_queue_, gpr_now(gpr
if (HasData())
{
responder_.Write(reply_, this);
}
else
{
grpc::Alarm alarm;
alarm.Set(completion_queue_, gpr_now(gpr_clock_type::GPR_CLOCK_REALTIME), this);
}
我尝试使用本文中建议的报警对象方法,但由于某种原因,在完成队列的下一个next
函数调用中,我得到的ok
参数为false-GPR\u断言(cq\u->next(&tag,&ok))代码>。因此,我不得不关闭服务器,无法在流上等待进一步的数据可用
我能够很好地接收数据,直到未命中else
案例
有人能帮我确定我可能做错了什么吗?我在GRPC上找不到很多C++资源。谢谢
当报警超出范围时,它将生成一个Cancel(),使您得到!下一步中的ok()
如果要使用此选项,则需要将警报放入类范围并触发它:
std::唯一的ptr报警;
报警复位(新报警);
报警->设置(cq、grpc超时时间、秒到截止时间(10),此设置);
从Alarm::Set上的文档:
在指定的时间点在完成队列cq上触发报警实例
时间
一旦警报过期(截止日期)或取消(请参阅取消),
带有标记的事件将添加到cq。如果警报过期,则
事件的成功位为真,否则为假(即
取消)