В Android 12+ вызовы REST API очень медленные, в WiFi это занимает 10 секунд, тогда как в мобильных данных это меньше секунды

У меня возникла проблема с версией Flutter Android 12+. Вызовы REST API, потребляющие приложение, с использованием http-плагина Flutter (версия: 0.13.5). Все вызовы API являются вызовами службы HTTPS с доменным именем. Вызовы API требуют более 10 секунд для предоставления ответа, тогда как те же вызовы API занимают менее секунды в мобильных сетях передачи данных. Те же самые вызовы API, которые я пробовал с помощью Java Client и Postman, все ответы заняли менее секунды, чтобы получить ответ.

Во время устранения неполадок я протестировал следующие сценарии с использованием сети Wi-Fi.

  1. Вместо домена я выполнил вызов службы API, используя IP-адрес, что заняло менее секунды (проверка SSL отключена в плагине HTTP)
  2. Протестированный вызов API с использованием поддержания соединения: правда, тогда первый вызов занял 10+ секунд, после чего последующие вызовы заняли менее секунды
  3. Интересен тот факт, что проблема у меня возникла только на Android 12+, устройство на Android 11 работало в сети WiFi, и на обращение в службу поддержки ушло меньше секунды.

Теперь я понял, что вызовы API на основе Wi-Fi всегда занимают 10 секунд + фактическое время вызова службы (например, 400 мс, следовательно, это будет 10 400 секунд).

Есть ли какая-то конкретная причина для этой проблемы?

flutter doctor -v
[√] Flutter (Channel stable, 3.3.6, on Microsoft Windows [Version 10.0.22000.1219], locale en-US)
    • Flutter version 3.3.6 on channel stable at C:\Applns\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 6928314d50 (6 weeks ago), 2022-10-25 16:34:41 -0400
    • Engine revision 3ad69d7be3
    • Dart version 2.18.2
    • DevTools version 2.15.0

[!] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1)
    • Android SDK at C:\Users\Siju\AppData\Local\Android\sdk
    X cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    X Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/windows#android-setup for more details.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[√] Visual Studio - develop for Windows (Visual Studio Community 2022 17.4.1)
    • Visual Studio at C:\Program Files\Microsoft Visual Studio\2022\Community
    • Visual Studio Community 2022 version 17.4.33110.190
    • Windows 10 SDK version 10.0.22000.0

[√] Android Studio (version 2021.2)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+7-b1504.28-7817840)

[√] Connected device (4 available)
    • 2201116SI (mobile) • b75ac32a6d34 • android-arm64  • Android 12 (API 31)
    • Windows (desktop)  • windows      • windows-x64    • Microsoft Windows [Version 10.0.22000.1219]
    • Chrome (web)       • chrome       • web-javascript • Google Chrome 107.0.5304.123
    • Edge (web)         • edge         • web-javascript • Microsoft Edge 107.0.1418.62

[√] HTTP Host Availability
    • All required HTTP hosts are available

Так что медленный только DNS по Wi-Fi?

blackapps 04.12.2022 11:16

да, другие домены отлично работают на Android12+. Кроме того, одно и то же доменное имя работает в течение секунды при использовании HTTP-клиента Java в том же Wi-Fi.

John_S 04.12.2022 11:28

А браузер на вашем устройстве?

blackapps 04.12.2022 11:35

Да, в браузере Chrome это заняло меньше секунды

John_S 04.12.2022 11:49
4
4
202
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта проблема связана с разрешением DNS IPv4/IPv6 в HTTP-клиенте флаттера. Во время вызова службы HTTP клиент dart пытается разрешить DNS, используя адрес IPv6 вместо IPv4, где DNS-серверы не поддерживают версию IPV6, поэтому он ждет 10 секунд, после чего возвращается к IPv4 и устанавливает соединение. Многие разработчики флаттера сообщили об этой проблеме в репозитории Flutter git.

Все эти проблемы были объединены и сообщены о новой функции в репозитории Flutter git (https://github.com/flutter/flutter/issues/116537)

Обновить Запрос функции Flutter закрыт и поднят новый запрос функции в dart SDK https://github.com/dart-lang/sdk/issues/50868

Вы нашли какое-либо решение для этой проблемы??

KJEjava48 19.01.2023 11:16

Я еще не отправил запрос функции в dart SDK github.com/dart-lang/sdk/issues/50868

John_S 19.01.2023 11:18

Другие вопросы по теме