不像人接入互联网的简单方便,由于物联网设备大多都是资源限制型的,有限的CPU、RAM、Flash、网络宽带等。对于这类设备来说,想要直接使用现有网络的TCP和HTTP来实现设备实现信息交换是不现实的。于是为了让这部分设备能够顺利接入网络,CoAP协议就被设计出来了。
以上是来自维基百科对CoAP的定义。简言之,CoAP是受约束设备的专用Internet应用程序协议。
CoAP是一个完整的二进制应用层协议,消息格式紧凑,默认运行在UDP上。
这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。
这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器的软硬件资源无法完成对请求的处理。
CoAP参考了很多HTTP的设计思路,同时也根据受限资源限制设备的具体情况改良了诸多的设计细节,增加了很多实用的功能。
CoAP协议的设计参考了HTTP,CoAP和MQTT都是行之有效的物联网协议,一下为它们之间的异同。
EMQ的开源版提供了一个 Generic CoAP 的实现,读者如果有兴趣的话可以试用一下。在EMQ的商业版中,包含了对CoAP的完整支持。
Californium 是一款基于Java实现的Coap技术框架,该项目实现了Coap协议的各种请求响应定义,支持CON/NON不同的可靠性传输模式。GIT地址: https://github.com/eclipse/californium
模块说明
~.californium-core
californium 核心模块,定义了一系列协议栈核心接口,并提供了Coap协议栈的完整实现,
~.element-connector
从core模块剥离的连接器模块,用于抽象网络传输层的接口,使得coap可以同时运行于udp和tcp多种传输协议之上;
~.scandium-core
Coap over DTLS 支持模块,提供了DTLS 传输的Connector实现;
~.californium-osgi
californium 的osgi 封装模块;
~.californium-proxy
coap 代理模块,用于支持coap2coap、coap2http、http2coap的转换;
~.demo-xxx
样例程序;
其中,californium-core和element-connector是coap技术实现最关键的模块,后面的分析将围绕这两个模块进行。
Californiium 定义了三层架构:
1 网络层,负责处理端口监听,网络数据收发;
2 协议层,负责Coap协议数据包解析及封装,实现消息的路由、可靠性传输、Token处理、观察者模型等等;
3 逻辑层,负责 Resource定义和映射,一个Resource 对应一个URL,可独立实现Coap 请求处理。
异步线程池
三层架构中都可以支持独立的线程池,其中网络层与协议层的线程池保持独立;
逻辑层可为每个Resource指定独立的线程池,并支持父级继承的机制,即当前Resource若没有定义则沿用父级Resource线程池;
若逻辑层未指定线程池,则默认使用协议层的线程池。
GIT地址: https://github.com/eclipse/californium
Coap是基于UDP的应用层,但是Californium实现了coap udp和tcp两种传输层协议,单次请求传输限制在1M以内。
提供:GET、POST、PUT、DELETE四种请求类型。
Coap是基于二进制的协议,header只有4个字节,非常紧凑。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)