Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
374 views
in Technique[技术] by (71.8m points)

flutter - GRPC stream is sending data unreliably (either incorrect, duplicate, or missing)

I'm building a Flutter app that contains a list of items that are shared live with multiple other users. When one user selects an item, all other users are notified of the selection via a stream that yields one or more SelectionContainer objects.

I'm having an issue where clients are randomly receiving incorrect (or sometimes flat-out missing) data from the stream, despite the server reporting accurate data.

Here is the GRPC code for my subscription function:

func (s *Server) SelectionSubscribe(in *SelectionCurrentUsersRequest, stream CPUser_SelectionSubscribeServer) error {
    log.Print("Trying to subscribe")
    for _, c := range s.selects {
        if c.tokenCode == in.TokenCode {        
            for {
                cont := <-c.tokenSelects
                log.Printf("Data from channel: %v", cont)
                if err := stream.Send(&cont); err != nil {
                    c.tokenSelects <- cont
                    log.Printf("Stream connection failed: %v", err)
                    return nil
                }
            }
        }
    }
    return nil;
}

And here is the client-side Dart code for my listening function:

Stream<SelectionContainer> listenForOrderUpdates() async* {
    var authReq = AuthTokenRequest(token: global.authToken);
    var request = SelectionCurrentUsersRequest(authRequest: authReq);
    var stream = client.selectionSubscribe(request);
    await for (SelectionContainer response in stream) {
      print("RESPONSE: $response");
      yield response;
    }
    stream.cancel();
  }

For extra context, when I quickly select three items (IDs: 1, 2, 3) on the first device, the server always prints that IDs 1, 2, and 3 have been selected, which is completely accurate. Sometimes, however, a second device might report that IDs 1, 2, and 2 have been selected, while a third device might report that IDs 1, 1, and 3 have been selected. Occasionally, a client might not even report three IDs. It appears to be random which values the clients receive.

Does anyone know why this is?

question from:https://stackoverflow.com/questions/65856394/grpc-stream-is-sending-data-unreliably-either-incorrect-duplicate-or-missing

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...