Общение Android в реальном времени: применение и оптимизация WebSocket и WebRTC
Общение Android в реальном времени: применение и оптимизация WebSocket и WebRTC

В современных мобильных приложениях общение в реальном времени стало фундаментальной функцией. Будь то чат в реальном времени, онлайн-игры или аудио- и видеосвязь в реальном времени, все они должны полагаться на технологии связи в реальном времени. В этой статье будут представлены два основных метода обеспечения связи в реальном времени на платформе Android: WebSocket и WebRTC.

1. Применение WebSocket в Android

1.1 Введение

WebSocket — это протокол для полнодуплексной связи через одно TCP-соединение. Его основное преимущество заключается в том, что он имеет высокую производительность в реальном времени и может осуществлять передачу данных от сервера к клиенту в реальном времени.

Ниже приведен пример протокола WebSocket:

На этой диаграмме последовательности мы можем увидеть основной процесс протокола WebSocket:

  1. Клиент отправляет HTTP Просьба, просьба обновить протокол до WebSocket。
  2. Ответ сервера HTTP Запрос, код состояния 101(Switching Protocols),Соглашатьсяпротоколобновление。
  3. После установки соединения WebSocket между клиентом и сервером возможна полнодуплексная связь. Они могут отправлять друг другу кадры WebSocket, содержащие соответствующие сообщения.
  4. Когда связь заканчивается, клиент и сервер могут отправить кадры Close, чтобы закрыть соединение WebSocket.

На этой диаграмме последовательности показан основной процесс протокола WebSocket, подчеркивая его характеристики связи в режиме реального времени и полнодуплексного режима.

1.2 Пример

в Android,Мы можем использовать библиотеку OkHttp для создания WebSocketсоединять.,мы должны СоздайтеOkHttpClientэкземпляр иRequestПример,а потом позвониOkHttpClientизnewWebSocketметод созданияWebSocketсоединять.Следующий,нам нужно достичьWebSocketListenerинтерфейс,Обработка изменений статуса соединения и сообщений полученоизсобытие。

Вот пример создания соединения WebSocket в Android с использованием библиотеки OkHttp:

первый,существоватьbuild.gradleДобавить в файлOkHttpполагаться:

Язык кода:javascript
копировать
dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.9.1'
}

Следующий,СоздайтеOkHttpClientэкземпляр иRequestПример,а потом позвониOkHttpClientизnewWebSocketСоздание методаWebSocketсоединять:

Язык кода:javascript
копировать
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.WebSocket;
import okhttp3.WebSocketListener;

public class MainActivity extends AppCompatActivity {

    private OkHttpClient client;
    private WebSocket webSocket;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        client = new OkHttpClient();
        Request request = new Request.Builder().url("ws://example.com/websocket").build();
        webSocket = client.newWebSocket(request, new MyWebSocketListener());
    }

    private class MyWebSocketListener extends WebSocketListener {
        @Override
        public void onOpen(WebSocket webSocket, okhttp3.Response response) {
            // Соединение успешно
        }

        @Override
        public void onMessage(WebSocket webSocket, String text) {
            // сообщение получено
        }

        @Override
        public void onFailure(WebSocket webSocket, Throwable t, okhttp3.Response response) {
            // Соединение не удалось
        }
    }
}

2. Применение WebRTC в Android

2.1 Введение

WebRTC — это технология, которая поддерживает веб-браузеры для голосовых или видеоразговоров в реальном времени. Его главное преимущество заключается в том, что он может обеспечить сквозную аудио- и видеосвязь без ретрансляции через сервер.

Ниже приведен пример протокола WebRTC:

На этой диаграмме последовательности мы можем увидеть основной поток протокола WebRTC:

  1. Клиент A и Клиент B регистрируются на сервере сигнализации.
  2. Клиент А создает предложение SDP (протокол описания сеанса), включая форматы аудио и видео, сетевую информацию и т. д., и отправляет его на сервер сигнализации.
  3. Сервер сигнализации пересылает Offer SDP клиенту B.
  4. Клиент B создает ответ SDP на основе предложения SDP и отправляет его на сервер сигнализации.
  5. Сервер сигнализации пересылает ответ SDP клиенту А.
  6. Клиент A и клиент B обмениваются кандидатами ICE, включая IP-адреса, порты и т. д., через сервер сигнализации.
  7. Когда обмен кандидатами ICE завершен, между Клиентом A и Клиентом B устанавливается соединение WebRTC.
  8. Во время связи Клиент А и Клиент Б могут напрямую обмениваться аудио- и видеопотоками.

На этой диаграмме последовательности показан основной процесс протокола WebRTC, подчеркивая его сквозные характеристики аудио- и видеосвязи.

2.2 Пример

в Android,Мы можем использовать библиотеку WebRTC для реализации аудио- и видеосвязи в реальном времени. первый,мы должны СоздайтеPeerConnectionFactoryПример,затем создайтеPeerConnectionПример,Установите соответствующую функцию обратного вызова. Следующий,мы должныобмен через сервер Информация SDP (включая аудио и видео форматы)、сетевая информация и т. д.) и кандидаты ICE (включая IP-адреса、порт и др.).

Ниже приведен пример использования библиотеки WebRTC для реализации аудио- и видеосвязи в реальном времени в Android:

первый,существоватьbuild.gradleДобавить в файлWebRTCполагаться:

Язык кода:javascript
копировать
dependencies {
    implementation 'org.webrtc:google-webrtc:1.0.32006'
}

Следующий,СоздайтеPeerConnectionFactoryПример,затем создайтеPeerConnectionПример,Установите соответствующую функцию обратного вызова:

Язык кода:javascript
копировать
import org.webrtc.PeerConnectionFactory;
import org.webrtc.PeerConnection;
import org.webrtc.PeerConnection.Observer;

public class MainActivity extends AppCompatActivity {

    private PeerConnectionFactory peerConnectionFactory;
    private PeerConnection peerConnection;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        peerConnectionFactory = PeerConnectionFactory.builder().createPeerConnectionFactory();
        PeerConnection.RTCConfiguration config = new PeerConnection.RTCConfiguration(new ArrayList<>());
        peerConnection = peerConnectionFactory.createPeerConnection(config, new MyPeerConnectionObserver());
    }

    private class MyPeerConnectionObserver implements Observer {
        @Override
        public void onIceCandidate(org.webrtc.IceCandidate iceCandidate) {
            // Кандидат ICE получил
        }

        @Override
        public void onAddStream(org.webrtc.MediaStream mediaStream) {
            // Получать удаленный аудио и видео поток
        }

        // Другие функции обратного вызова опущены...
    }
}

В практических приложениях нам также необходимо обмениваться информацией SDP (включая аудио- и видеоформаты, сетевую информацию и т. д.) и кандидатами ICE (включая IP-адреса, порты и т. д.) через сервер сигнализации. Конкретная логика сигнализации и реализация сервера сигнализации могут различаться в зависимости от приложения.

3. Стратегии оптимизации для общения Android в реальном времени.

3.1 Оптимизация сети

Случай 1. Используйте соответствующие сетевые протоколы.

В игровых приложениях реального времени разработчики могут выбрать протокол UDP вместо протокола TCP. Поскольку протокол UDP не требует подтверждения получения каждого пакета данных, он лучше соответствует требованиям реального времени. Например, игра «Clash of Clans» от Supercell использует протокол UDP для связи в реальном времени.

Случай 2. Динамическая регулировка скорости передачи.

В приложениях видеосвязи в реальном времени скорость передачи необходимо динамически регулировать, поскольку условия сети могут меняться. Например, при плохом состоянии сети Zoom автоматически уменьшит разрешение видео, чтобы обеспечить плавность видеовызова.

Случай 3. Использование CDN для оптимизации сетевых путей.

В глобальных приложениях связи в реальном времени CDN (сеть распространения контента) может использоваться для оптимизации сетевых путей и уменьшения задержек. Например, Facebook развернул узлы CDN по всему миру, чтобы пользователи могли быстро получить доступ к его услугам.

3.2 Уменьшение задержки

Случай 1. Используйте кодеки и протоколы передачи с малой задержкой.

Аудио- и видеосвязь в режиме реального времени,Можно использовать кодеки с низкой задержкой.,Такие как H.264, AAC и т. д.,и протокол передачи с малой задержкой,Такие как RTP (протокол передачи в реальном времени) и т. д.,чтобы уменьшить задержку. Например,SkypeЭти технологии используются для достижения реального времени.Аудио и видеозвонки

Случай 2: Оптимизация стратегии сетевого планирования

В многозадачной параллельной среде задержку можно уменьшить за счет оптимизации стратегий сетевого планирования, например определения приоритетов задач связи в реальном времени. Например, сервис JobScheduler в системе Android можно использовать для оптимизации планирования сети.

Вариант 3. Уменьшите время обработки на сервере.

На стороне сервера время обработки сервера можно сократить за счет оптимизации кода, использования эффективных алгоритмов, обновления оборудования и т. д. Например, база данных Google Spanner использует некоторые эффективные алгоритмы и методы оптимизации для увеличения скорости обработки.

4. Проблемы безопасности связи Android в реальном времени

Проблемы безопасности, с которыми можно столкнуться при общении в реальном времени, включают безопасность данных и защиту конфиденциальности. Вот несколько решений:

4.1 Безопасность данных

  • Шифрование данных с использованием протокола, такого как TLS.:существоватьобщение в реальном Со временем мы сможем использовать протокол Transport Layer Security (TLS) для шифрования данных, чтобы обеспечить безопасность данных во время передачи. Например, если мы используем WebRTC для общения в реальном времени,тогда мы сможемсуществоватьсоздаватьPeerConnectionПримерчас,Настройте с помощью безопасного транспортного протокола (например, DTLS).,т. е. TLS на основе дейтаграмм).
  • Подтвердите личность с помощью таких механизмов, как токен.:мы можем использоватьTokenМеханизм проверки личности пользователя,Защитите от несанкционированного доступа. Например,После того, как пользователь войдет в систему, мы можем,Сервер генерирует токен и возвращает его клиенту.,клиент несет этот Токен в последующих сообщениях.,Сервер подтверждает личность пользователя, проверяя токен.
  • Передавайте данные с помощью безопасных средств, таких как HTTPS.:существоватьобщение в реальном Со временем мы также сможем использовать протокол HTTPS для передачи данных, чтобы обеспечить безопасность данных. Например, если мы используем WebSocket для общения в реальном времени,Тогда мы можем использовать wss (т.е. WebSocket на основе TLS) протокол.,Вместо wsпротокол.

4.2 Защита конфиденциальности

  • Следуйте принципу наименьших привилегий:Нам остаётся собрать только то, что необходимо для реализации функцииизпользовательинформация,Избегайте сбора и хранения ненужной информации. Например,Если нашему приложению нужен только никнейм и аватар пользователя,Тогда мы не должны просить пользователей предоставить другую личную информацию.,Например, день рождения, адрес и т. д.
  • Используйте технологию шифрования для защиты конфиденциальности пользователей.:для коллекцииизпользовательинформация,Мы должны использовать шифрование для хранения и передачи,Предотвратить утечку информации. Например,Мы можем использовать хеш-функцию для шифрования и хранения пароля пользователя.,Используйте алгоритмы шифрования для шифрования и передачи содержимого чата пользователя.

Достижение безопасности связи в реальном времени требует от нас всегда обращать внимание и учитывать безопасность данных и защиту конфиденциальности в процессе проектирования и разработки, а также применять соответствующие технологии и стратегии для защиты пользовательской информации.

5. Сравнение протоколов связи в реальном времени.

WebSocket и WebRTC — два широко используемых протокола связи в реальном времени, каждый из которых имеет свои преимущества и недостатки.

протокол

преимущество

недостаток

Применимые сценарии

WebSocket

Простота реализации и подходит для чата в реальном времени и других сценариев.

Требуется перенос сервера, и задержка относительно велика

Чат в реальном времени, приложения с ограниченными ресурсами сервера

WebRTC

Комплексная реализация, подходящая для аудио- и видеосвязи в реальном времени и других сценариев.

Обмен информацией необходимо осуществлять через сервер сигнализации, что требует высокого качества сети.

Аудио- и видеосвязь в реальном времени, приложения с высокими требованиями к работе в режиме реального времени

6. Резюме

В целом общение в реальном времени является важной технологией в разработке Android. Освоив WebSocket и WebRTC, мы можем предоставить пользователям более удобные возможности общения в реальном времени. В то же время нам также необходимо обратить внимание на вопросы оптимизации и безопасности связи в реальном времени, чтобы повысить производительность и стабильность приложений.

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.