在工作中遇到了grpc的stream通信(server通过stream向client返回一个消息的stream),client会收不到消息的情况。发现收不到的这个消息比较大,跟同事讨论说可能是grpc限制了消息的大小,通常是4M。网上搜索了一下,大多数是go的解决方案,和C++的接口名称不太一样,其中帮助比较大的是这一篇C++相关的博客http://www.freesion.com/article/475480468/,但是这里面只写了server端的message size设置,在我的代码中这样尝试之后,发现还是不能成功收到消息,最后根据我所用版本的源码,发现client连接时也需要做相关设置。本文给出的方法在我的环境下是可用的,但不确定是不是官方推荐的最佳方法,毕竟我没有找到官方的文档来说明这件事情。。
server端,在启动时对ServerBuilder调用SetMaxSendMessageSize:
service_ = std::make_unique<MessageBridgeService>();
builder_ = std::make_unique<grpc::ServerBuilder>();
builder_->SetMaxSendMessageSize( 10 * 1024 * 1024); // 10M
builder_->AddListeningPort(FLAGS_service_address,
grpc::InsecureServerCredentials());
builder_->RegisterService(