The default send/receive message length of gRPC is defined here:
/** Default send/receive message size limits in bytes. -1 for unlimited. */
/** TODO(roth) Make this match the default receive limit after next release */
#define GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH -1
#define GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH (4 * 1024 * 1024)
We can know that send message length is no limited (-1
), while Server/Client can only receive 4 Mi
bytes by default.
You can change receive message length to unlimited in Client:
grpc::ChannelArguments ch_args;
ch_args.SetMaxReceiveMessageSize(-1);
std::shared_ptr<grpc::Channel> ch =
grpc::CreateCustomChannel("localhost:50051", grpc::InsecureChannelCredentials(), ch_args);
But this doesn’t work in Server:
ServerBuilder builder;
builder.SetMaxReceiveMessageSize(-1);
Because in server_builder.cc, the parameter only takes effect when it is positive:
std::unique_ptr<Server> ServerBuilder::BuildAndStart() {
......
if (max_receive_message_size_ >= 0) {
args.SetInt(GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH, max_receive_message_size_);
}
......
}
So we can use builder.SetMaxReceiveMessageSize(INT_MAX);
as a work-around.
BTW, check message length limit is in get_message_size_limits function.
‘BuildAndStart’ allows ‘max_receive_message_size_==-1’ in new version