> you suggest to stick with unary rpcs

I would recommend to test all stability - / interrupt - / reconnect - 
scenarios before switching to a stream based communication completely.
In my case I found much easier to handle all these edge-cases with unary 
calls. 

>  framework (on top of grpc?). Do you know any 
No - I do not know any framework here. 

For me the unary calls are comparable to TCP - you will get an acknowledge 
if the message was received correctly.
The GRPC stream is more like an UDP communication - if you want to be sure, 
that a  message   is transmitted correctly you have to invent you own 
handshake.

On Thursday, April 8, 2021 at 10:51:42 AM UTC+2 Filip Mrázek wrote:

> Thank you Tobias for your answer. If I understand your answer, you suggest 
> to stick with unary rpcs and use already done communication framework (on 
> top of grpc?) . Do you know any which would be easy to learn and sufficient 
> for this case? Thank you
>
> Regards,
>
> Filip
> Dne středa 7. dubna 2021 v 8:56:56 UTC+2 uživatel tobias.krueger napsal:
>
>> Hi Filip,
>>
>> from my experience streams are difficult to handle when it comes to a 
>> (un)reliable channels.
>> Especially if you have to deal with crashing or ungraceful disconnecting 
>> clients.
>> The client has no control if a sent packet has reached the server or not 
>> not. The same applies to the back channel: The server does not know if the 
>> client crashed or is just idle.
>>
>> IMHO it is also not feasible to invent your own handshake on top of an 
>> unreliable streamed channel - this is something that a communication 
>> framework can do better.
>> I would stick with unary rpcs.
>>
>> Best regards
>>
>>
>> On Tuesday, April 6, 2021 at 11:24:13 PM UTC+2 Filip Mrázek wrote:
>>
>>> Hi,
>>> thak you for your reply. Client controls robot (after calling *connect 
>>> *with 
>>> master request) via several unary rpc calls (move, setTool, etc.). I 
>>> was thinking about something like this: *rpc (stream Control) returns 
>>> (stream ControlResponse), *but it's hard to create clean elegant 
>>> *Control* message to contain everything needed. It would be nice to be 
>>> able to send multiple message types. (and I think it's possible only with 
>>> *oneof *nowadays, which I don't like, beacause every new command means 
>>> to edit proto on two locations (new message type and adding message to 
>>> oneof).
>>> Anyway, am I able to detect client cannot send request with stream? (he 
>>> disconnected) How? Is there any example, please?
>>> Thanks.
>>>
>>> Regards,
>>>
>>> Filip. 
>>> Dne úterý 6. dubna 2021 v 21:02:31 UTC+2 uživatel sunanda...@gmail.com 
>>> napsal:
>>>
>>>> Hi Filip,
>>>> I believe I can understand your problem.
>>>>
>>>> As you have mentioned your client is master or controller for Robot, 
>>>> right?
>>>> In that case how are you sending the control instruction to the robot, 
>>>> is there any stream then you can easily detect the client disconnection.
>>>> If you are reading at server end when the client dies the read will not 
>>>> return true, so you can understand from there.
>>>>
>>>> Otherwise you have to introduce some new API to notify client 
>>>> disconnection and keep that call in catch() block somehow. That may help.
>>>>
>>>> Regards,
>>>> SN
>>>>
>>>> On Friday, 2 April 2021 at 16:13:21 UTC+5:30 Filip Mrázek wrote:
>>>>
>>>>> Hi,
>>>>> I would like to write gRPC server in C++, which is able to detect if 
>>>>> client disconnected from the channel (client crashed or closed app). I 
>>>>> need 
>>>>> this, because server manages a physical robot and only one client can 
>>>>> controll the robot at the same time (other clients can check only robot's 
>>>>> properties such as position and so on).
>>>>> I've got *rpc connect(ConnectionInfo) returns(Token) *where 
>>>>> ConnectionInfo contains information wheater client wants to control robot 
>>>>> (wants to be master) or not and if it's possible, server returns access 
>>>>> token. After the master client disconnects, I want to remove token from 
>>>>> server to able other clients connect as master.
>>>>> The only solution I found out is to have *rpc disconnect() 
>>>>> returns(Empty)*, but I doesn't cover case when client crash or just 
>>>>> forget to call *disconnect *and robot is blocked*.*
>>>>> Is it possible with c++ gRPC, or what whould you recommend as the best 
>>>>> solution fot this problem? 
>>>>> Thank you very much.
>>>>>
>>>>> Filip.
>>>>>
>>>>> PS: I found several discussions, but none of them is helpful.
>>>>> https://groups.google.com/g/grpc-io/c/C0rAhtCUhSs/m/SzFDLGqiCgAJ
>>>>> https://groups.google.com/g/grpc-io/c/EIcQlLqlNQg
>>>>>
>>>>

-- 
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 grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/3ee478c2-f08e-4b05-9d9e-918aba76a23bn%40googlegroups.com.

Reply via email to