grpc_async_bidirectional_stream_example
github 地址:https://github.com/fananchong/grpc_async_bidirectional_stream_example
例子基于线上稳定、高效跑了 1 年以上的 gRPC C++ 库网络框架
最开始作为测试,实验性放到 github 抓虫
使用的是异步双向流
简化编码,在异步双向流基础上,引入 echo 型编码设计模式
类似如下:
- 实现对应类方法:
bool Msg_TestService_Stream::OnProcess() { INFO("Msg_TestService_Stream::OnProcess"); switch (request_.Msg_case()) { case test::Frame::kEcho: { auto v = reply_.mutable_echo(); v->set_data(request_.echo().data()); // CloseStream(); } break; case test::Frame::kPing: break; default: break; } return true; }
- 注册服务
gserver.RegisterMsg(new Msg_TestService_Stream(service));
连续发送消息
最近更新,上了流消息处理里,可以连续发送 N 个消息
类似如下用法:
bool Msg_TestService_Stream2::OnProcess()
{
INFO("Msg_TestService_Stream2::OnProcess");
switch (request_.Msg_case())
{
case test::Frame::kEcho:
{
test::Frame rep1;
auto v1 = rep1.mutable_echo();
v1->set_data(fmt::format("{} #1", request_.echo().data()));
SendMsg(rep1, false);
test::Frame rep2;
auto v2 = rep2.mutable_echo();
v2->set_data(fmt::format("{} #2", request_.echo().data()));
SendMsg(rep2, false);
test::Frame rep3;
auto v3 = rep3.mutable_echo();
v3->set_data(fmt::format("{} #3", request_.echo().data()));
SendMsg(rep3, true);
return false;
}
break;
case test::Frame::kPing:
break;
default:
break;
}
return true;
}
例子支持的功能
目前支持以下功能:
- 异步一元函数处理
- 异步双向流处理
- 支持多线程
- 支持同个流处理内,发送 N 次消息
- 流定时回调处理
其他
基本上,以上功能,绝大多数需求都能满足了。欢迎 star ,讨论