Hi, Sree:
Do you know what if the stream is an async bidi stream? If I want to close
from the server side by TryCancel() and followed by a Finish(), will this
cause any problem? After what I called stream->Finish(status), will this
event return in the CQ if the client is closed already?
Thanks,
Yihao
在 2017年6月27日星期二 UTC-7下午4:18:43,Sree Kuchibhotla写道:
>
> Sorry for the late response.
>
> There is no special method to 'close' the BiDi streams. On the server,
> just returning a status would mean that you are done with the stream.
>
> However, in the example you have given, you seem to be calling just 1
> read. Since you mentioned you are noticing a memory leak, I was
> wondering...are you sure that you are reading all the messages that client
> is sending ?
>
> You don't have to really check 'context->IsCancelled()' here.
> stream->Read() has a return value. It returns 'true' as long as there is a
> message to read from the client. stream->Read() returns a 'false' either
> when the client gracefully finished the writes (by calling
> stream->WritesDone() and stream->Finish() on the client side) or if the
> client cancelled the RPC or there was some other error..
>
> So I recommend you rewrite your loop as
>
> Status BidiServiceImpl::BiDiStreamingRpc(...)
> {
> ..
> while (stream->Read(&req)) {
> getRest(resp);
> stream->Write(resp);
> }
>
> // You can check context->IsCancelled() here if you
> // are interested in whether the RPC was cancelled
>
> return Status(..)
> }
>
> thanks,
> Sree
>
>
> On Monday, May 1, 2017 at 10:45:37 PM UTC-7, [email protected]
> wrote:
>>
>>
>> Hello,
>>
>> Is there a way to close down BiDi streaming gracefully from C++ server
>> thread (pthr) when c++ client gets aborted? When I simply return from Bidi
>> streaming rpc based on IsCancelled() I observe memory leaks.
>>
>> Here is the sample code
>>
>>
>> Status BiDiServiceImpl::BiDiStreamingRpc(::grpc::ServerContext* context,
>> ::grpc::ServerReaderWriter< BiDiResponse, BiDiRequest>* stream)
>> {
>> BiDiRequest req;
>> BiDiResponse resp;
>>
>> stream->Read(&req);
>> while(context->IsCancelled() == false)
>> {
>> getResp(resp);
>> stream->Write(resp);
>> }
>> return(Status(Status::GRPC_OK, ""));
>> }
>>
>>
>> Thanks
>> Rajeev
>>
>>
--
You received this message because you are subscribed to the Google Groups
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/grpc-io.
To view this discussion on the web visit
https://groups.google.com/d/msgid/grpc-io/56335867-c88a-429d-9270-184244bf3ac8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.