В современных мобильных приложениях общение в реальном времени стало фундаментальной функцией. Будь то чат в реальном времени, онлайн-игры или аудио- и видеосвязь в реальном времени, все они должны полагаться на технологии связи в реальном времени. В этой статье будут представлены два основных метода обеспечения связи в реальном времени на платформе Android: WebSocket и WebRTC.
WebSocket — это протокол для полнодуплексной связи через одно TCP-соединение. Его основное преимущество заключается в том, что он имеет высокую производительность в реальном времени и может осуществлять передачу данных от сервера к клиенту в реальном времени.
Ниже приведен пример протокола WebSocket:
На этой диаграмме последовательности мы можем увидеть основной процесс протокола WebSocket:
На этой диаграмме последовательности показан основной процесс протокола WebSocket, подчеркивая его характеристики связи в режиме реального времени и полнодуплексного режима.
в Android,Мы можем использовать библиотеку OkHttp для создания WebSocketсоединять.,мы должны СоздайтеOkHttpClient
экземпляр иRequest
Пример,а потом позвониOkHttpClient
изnewWebSocket
метод созданияWebSocketсоединять.Следующий,нам нужно достичьWebSocketListener
интерфейс,Обработка изменений статуса соединения и сообщений полученоизсобытие。
Вот пример создания соединения WebSocket в Android с использованием библиотеки OkHttp:
первый,существоватьbuild.gradle
Добавить в файлOkHttpполагаться:
dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
}
Следующий,СоздайтеOkHttpClient
экземпляр иRequest
Пример,а потом позвониOkHttpClient
изnewWebSocket
Создание методаWebSocketсоединять:
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) {
// Соединение не удалось
}
}
}
WebRTC — это технология, которая поддерживает веб-браузеры для голосовых или видеоразговоров в реальном времени. Его главное преимущество заключается в том, что он может обеспечить сквозную аудио- и видеосвязь без ретрансляции через сервер.
Ниже приведен пример протокола WebRTC:
На этой диаграмме последовательности мы можем увидеть основной поток протокола WebRTC:
На этой диаграмме последовательности показан основной процесс протокола WebRTC, подчеркивая его сквозные характеристики аудио- и видеосвязи.
в Android,Мы можем использовать библиотеку WebRTC для реализации аудио- и видеосвязи в реальном времени. первый,мы должны СоздайтеPeerConnectionFactory
Пример,затем создайтеPeerConnection
Пример,Установите соответствующую функцию обратного вызова. Следующий,мы должныобмен через сервер Информация SDP (включая аудио и видео форматы)、сетевая информация и т. д.) и кандидаты ICE (включая IP-адреса、порт и др.).
Ниже приведен пример использования библиотеки WebRTC для реализации аудио- и видеосвязи в реальном времени в Android:
первый,существоватьbuild.gradle
Добавить в файлWebRTCполагаться:
dependencies {
implementation 'org.webrtc:google-webrtc:1.0.32006'
}
Следующий,СоздайтеPeerConnectionFactory
Пример,затем создайтеPeerConnection
Пример,Установите соответствующую функцию обратного вызова:
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-адреса, порты и т. д.) через сервер сигнализации. Конкретная логика сигнализации и реализация сервера сигнализации могут различаться в зависимости от приложения.
Случай 1. Используйте соответствующие сетевые протоколы.
В игровых приложениях реального времени разработчики могут выбрать протокол UDP вместо протокола TCP. Поскольку протокол UDP не требует подтверждения получения каждого пакета данных, он лучше соответствует требованиям реального времени. Например, игра «Clash of Clans» от Supercell использует протокол UDP для связи в реальном времени.
Случай 2. Динамическая регулировка скорости передачи.
В приложениях видеосвязи в реальном времени скорость передачи необходимо динамически регулировать, поскольку условия сети могут меняться. Например, при плохом состоянии сети Zoom автоматически уменьшит разрешение видео, чтобы обеспечить плавность видеовызова.
Случай 3. Использование CDN для оптимизации сетевых путей.
В глобальных приложениях связи в реальном времени CDN (сеть распространения контента) может использоваться для оптимизации сетевых путей и уменьшения задержек. Например, Facebook развернул узлы CDN по всему миру, чтобы пользователи могли быстро получить доступ к его услугам.
Случай 1. Используйте кодеки и протоколы передачи с малой задержкой.
Аудио- и видеосвязь в режиме реального времени,Можно использовать кодеки с низкой задержкой.,Такие как H.264, AAC и т. д.,и протокол передачи с малой задержкой,Такие как RTP (протокол передачи в реальном времени) и т. д.,чтобы уменьшить задержку. Например,SkypeЭти технологии используются для достижения реального времени.Аудио и видеозвонки。
Случай 2: Оптимизация стратегии сетевого планирования
В многозадачной параллельной среде задержку можно уменьшить за счет оптимизации стратегий сетевого планирования, например определения приоритетов задач связи в реальном времени. Например, сервис JobScheduler в системе Android можно использовать для оптимизации планирования сети.
Вариант 3. Уменьшите время обработки на сервере.
На стороне сервера время обработки сервера можно сократить за счет оптимизации кода, использования эффективных алгоритмов, обновления оборудования и т. д. Например, база данных Google Spanner использует некоторые эффективные алгоритмы и методы оптимизации для увеличения скорости обработки.
Проблемы безопасности, с которыми можно столкнуться при общении в реальном времени, включают безопасность данных и защиту конфиденциальности. Вот несколько решений:
PeerConnection
Примерчас,Настройте с помощью безопасного транспортного протокола (например, DTLS).,т. е. TLS на основе дейтаграмм).Достижение безопасности связи в реальном времени требует от нас всегда обращать внимание и учитывать безопасность данных и защиту конфиденциальности в процессе проектирования и разработки, а также применять соответствующие технологии и стратегии для защиты пользовательской информации.
WebSocket и WebRTC — два широко используемых протокола связи в реальном времени, каждый из которых имеет свои преимущества и недостатки.
протокол | преимущество | недостаток | Применимые сценарии |
---|---|---|---|
WebSocket | Простота реализации и подходит для чата в реальном времени и других сценариев. | Требуется перенос сервера, и задержка относительно велика | Чат в реальном времени, приложения с ограниченными ресурсами сервера |
WebRTC | Комплексная реализация, подходящая для аудио- и видеосвязи в реальном времени и других сценариев. | Обмен информацией необходимо осуществлять через сервер сигнализации, что требует высокого качества сети. | Аудио- и видеосвязь в реальном времени, приложения с высокими требованиями к работе в режиме реального времени |
В целом общение в реальном времени является важной технологией в разработке Android. Освоив WebSocket и WebRTC, мы можем предоставить пользователям более удобные возможности общения в реальном времени. В то же время нам также необходимо обратить внимание на вопросы оптимизации и безопасности связи в реальном времени, чтобы повысить производительность и стабильность приложений.