问题描述
我正在构建一个 Flutter 应用程序,其中包含与多个其他用户实时共享的项目列表。当一个用户选择一个项目时,所有其他用户都会通过产生一个或多个 SelectionContainer
对象的流收到该选择的通知。
我遇到了一个问题,尽管服务器报告了准确的数据,但客户端从流中随机接收到不正确(有时甚至完全丢失)的数据。
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;
}
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();
}
对于额外的上下文,当我在第一台设备上快速选择三个项目(ID:1、2、3)时,服务器总是打印出 ID 1、2 和 3 已被选中,这是完全准确的。但是,有时第二个设备可能会报告已选择 ID 1、2 和 2,而第三个设备可能会报告已选择 ID 1、1 和 3。有时,客户端甚至可能不会报告三个 ID。客户端接收的值似乎是随机的。
有人知道这是为什么吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)