COAP как источник потоковой передачи
В настоящее время я работаю над протоколом IOT Coap. Я получил доступ к серверу на локальном хосте через медный плагин Firefox. Затем я добавил Resouce, имеющий "GET" функциональность на сервере. После этого я сделал его клиентом в качестве источника потоковой передачи. Вот код потокового клиента
class customReceiver(test:String) extends Receiver[String](StorageLevel.MEMORY_AND_DISK_2) with Logging with Serializable {
@volatile private var stopped = false
override def onStart() {
val client = new CoapClient("ip/resource")
var text = client.get().getResponseText();
store(text)
}
override def onStop(): Unit = synchronized {
try
{
stopped = true
}
catch
{
case e: Exception => println("exception caught: " + e);
}
}
}
но я столкнулся с проблемой. Во время потоковой передачи он просто читает ресурс один раз. после этого он выбирает все пустые rdd и завершает свои пакеты. Между тем, если ресурс меняет свое значение, он этого не читает. я делаю что-то не так? или есть ли какие-либо другие функции для чтения при изменении ресурса, которые я могу обработать в моем пользовательском приемнике.? или есть идеи о том, как получать значения непрерывно во время потоковой передачи?
Любая помощь очень ожидаема и ценится. Спасибо
2 ответа
Потоковая передача данных является реализацией приложения.
- 1] Вы можете подписаться на ресурс в качестве наблюдателя. Функциональность наблюдателя должна быть реализована в вашем приложении.
- 2] Вы можете непрерывно отправлять данные с интервалом, используя функцию PUT.
Хороший НАБЛЮДАТЕЛЬНЫЙ пример приведен в libcoap
где клиент (firefox copper) наблюдает за "временным" ресурсом сервера (coap-server). coap-server
непрерывно отправляет сообщение CON о времени и дате клиенту, так как время меняется с точностью до секунды. В свою очередь, клиент отправляет сообщение ACK.
Также CoAP в сочетании с функциональностью TCP лучше подходит для потоковой передачи данных.
Существует функция наблюдения: она позволяет клиентам CoAP "подписываться" на ресурсы, а серверы отправлять обновления подписанным клиентам, когда ресурс, на который подписывается клиент, изменяется в течение определенного периода времени. Вот черновик IEFT.