经过一些调试后,我发现这两个问题都是由于我在创建服务器之前创建客户端的一个问题。
因为我最初使用一元RPC调用,所以来自客户端的先前调用仅导致gRPC错误代码14.程序继续,因为在创建服务器之后发送的每个调用都可以正确处理。
但是,当涉及到流媒体通话时, stub->RequestVote(&context_r) 最终会调用阻塞函数 ClientReaderWriter::ClientReaderWriter ,它将尝试连接到现在不创建的服务器。
stub->RequestVote(&context_r)
ClientReaderWriter::ClientReaderWriter
/// Block to create a stream and write the initial metadata and \a request /// out. Note that \a context will be used to fill in custom initial metadata /// used to send to the server when starting the call. ClientReaderWriter(::grpc::ChannelInterface* channel, const ::grpc::internal::RpcMethod& method, ClientContext* context) : context_(context), cq_(grpc_completion_queue_attributes{ GRPC_CQ_CURRENT_VERSION, GRPC_CQ_PLUCK, GRPC_CQ_DEFAULT_POLLING}), // Pluckable cq call_(channel->CreateCall(method, context, &cq_)) { if (!context_->initial_metadata_corked_) { ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata> ops; ops.SendInitialMetadata(context->send_initial_metadata_, context->initial_metadata_flags()); call_.PerformOps(&ops); cq_.Pluck(&ops); } }
因此,尚未建立连接。