

Courier - это библиотека Kotlin для создания длинных работающих соединений с использованием протокола MQTT.
Давнее работает подключение-это постоянное соединение, установленное между клиентом и сервером для мгновенной двунаправленной связи. Длительное подключение поддерживается для максимально возможной продолжительности с помощью пакетов Keep Alive. Это помогает в экономии батареи и данных на мобильных устройствах.
MQTT - это чрезвычайно легкий протокол, который работает на модели публикации/подписки обмена сообщениями. Он предназначен для соединений с удаленными местоположениями, где требуется «небольшой кодовый след» или пропускная способность сети ограничена.
Протокол обычно работает над TCP/IP; Однако любой сетевой протокол, который обеспечивает упорядоченные, без потерь, двунаправленные соединения, может поддерживать MQTT.
MQTT имеет 3 встроенных уровня QOS для надежной доставки сообщений:
QoS 0 (не более одного раза) - сообщение отправляется только один раз, и клиент и брокер не предпринимают никаких дополнительных шагов, чтобы подтвердить доставку (пожар и забыть).
QoS 1 (по крайней мере один раз) - Сообщение повторно повторяется отправителем несколько раз, пока не будет получено подтверждение (подтвержденная доставка).
QoS 2 (ровно один раз) - отправитель и приемник участвуют в двухуровневом рукопожатии, чтобы обеспечить получение только одну копию сообщения (гарантированная доставка).
Найдите подробную документацию здесь - https://gojek.github.io/courier-android/
Пример Courier end Courier
Чистый API
Адаптивная сохраняется
Адаптеры сообщения и потока
Магазин подписки
Автоматическое воссоединение и повторную подписку
Постоянство базы данных
Обработка обратного давления
Сигнал тревоги, таймер и Workmanager Ping Sender
MQTT Чак
Более подробную информацию о функциях в курьерской библиотеке можно найти здесь
Здесь добавлено демонстрационное заявление, которое устанавливает курьеров с общественным брокером Hivemq.
Все артефакты курьерской библиотеки доступны через Maven Central.
repositories {
mavenCentral()
}
dependencies {
implementation " com.gojek.courier:courier:x.y.z "
implementation " com.gojek.courier:courier-message-adapter-gson:x.y.z "
implementation " com.gojek.courier:courier-stream-adapter-rxjava2:x.y.z "
}Объявите интерфейс услуг для таких действий, как отправка, получение, подписки, отписаться:
interface MessageService {
@Receive(topic = " topic/{id}/receive " )
fun receive (@Path( " id " ) identifier : String ): Observable < Message >
@Send(topic = " topic/{id}/send " , qos = QoS . TWO )
fun send (@Path( " id " ) identifier : String , @Data message : Message )
@Subscribe(topic = " topic/{id}/receive " , qos = QoS . ONE )
fun subscribe (@Path( " id " ) identifier : String ): Observable < Message >
@Unsubscribe(topics = [ " topic/{id}/receive " ])
fun unsubscribe (@Path( " id " ) identifier : String )
}Используйте курьера для создания реализации:
val mqttClient = MqttClientFactory .create(
context = context,
mqttConfiguration = MqttV3Configuration (
authenticator = authenticator
)
)
val courierConfiguration = Courier . Configuration (
client = mqttClient,
streamAdapterFactories = listOf ( RxJava2StreamAdapterFactory ()),
messageAdapterFactories = listOf ( GsonMessageAdapter . Factory ())
)
val courier = Courier (courierConfiguration)
val messageService = courier.create< MessageService >()messageService.subscribe( " user-id " ).subscribe { message ->
print (message)
}
messageService.unsubscribe( " user-id " )messageService.send( " user-id " , message)
messageService.receive( " user-id " ) { message ->
print (message)
} val connectOptions = MqttConnectOptions (
serverUris = listOf ( ServerUri ( SERVER_URI , SERVER_PORT )),
clientId = clientId,
username = username,
keepAlive = KeepAlive (
timeSeconds = keepAliveSeconds
),
isCleanSession = cleanSessionFlag,
password = password
)
mqttClient.connect(connectOptions)mqttClient.disconnect()Эта опция позволяет отправлять пользовательские программы в пакете Connect для MQTT v3.1.1.
val connectOptions = MqttConnectOptions (
serverUris = listOf ( ServerUri ( SERVER_URI , SERVER_PORT )),
clientId = clientId,
.. .
userPropertiesMap = mapOf (
" key1 " to " value1 " ,
" key2 " to " value2 "
)
)
mqttClient.connect(connectOptions)Прочитайте наше руководство по взносу, чтобы узнать о нашем процессе разработки, о том, как предложить ошибки и улучшения, а также о том, как создать и проверить свои изменения в библиотеке Courier Android.
Все курьерские модули, кроме Paho, имеют лицензию MIT. Пахо затмение лицензирована.