我目前正在研究IOT Coap协议。我通过铜firefox插件访问本地主机上的服务器。然后在服务器中添加了具有"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并完成其批处理。同时,如果资源改变了它的值,它不会读取。我做错了什么吗?或者是否存在任何其他功能读取每当资源得到改变,我可以在我的自定义接收器处理?或者关于如何在流媒体期间连续获取值的任何想法?
任何帮助都是非常期待和感激的。由于
数据流是应用程序的实现。
- 1]你可以订阅这个资源作为观察者。观察者功能必须在你的应用中实现。
- 2]您可以使用PUT功能连续发送数据间隔。
在libcoap
中提供了一个很好的观察示例,其中客户机(firefox铜)观察服务器(cap -server)的"时间"资源。coap-server
连续向客户端发送时间和日期的CON消息,因为时间每秒钟都在变化。客户端依次发送ACK消息。
CoAP结合TCP功能更适合数据流。
有一个观察功能:它允许CoAP客户端"订阅";到资源和服务器,以便在客户端订阅的资源在一段时间内发生更改时向订阅的客户端发送更新。这是IEFT的草稿