基于LwM2M协议的Eclipse Leshan简介
项目简介
Eclipse Leshan是OMA LwM2M的客户端和服务端的轻量级实现,它不是独立的服务器和客户端,而是一套可以用来开发自己的Lightweight M2M的服务端和客户端的开源的Java库。
项目地址:https://github.com/eclipse/leshan
项目结构及依赖关系
项目包含以下模块,但核心模块是leshan-client-cf,leshan-client-core,leshan-core,leshan-core-cf,leshan-server-cf,leshan-server-cire,leshan-server-redis。
Leshan-core
- 实现了JSON, TLV, TEXT, OPAQUE四种数据格式的编码器和解码器。下图是解码器类图。
- 定义了对象(Object),对象实例(ObjectInstance),资源(Resource)及他们的关系,这里有用到设计模式中的组合模式,类图如下:
- 定义通用的model对象
- 定义逻辑体之间操作的request,response对象,分上行操作和下行操作。示例是request对象的类图。
Leshan-core-cf
- 定义了CoAP request相关的observer,实现了同步observer和异步observer。
当client向server发送消息时,会将LwM2M request包装成CoAP request,通过californium的endpoint.sendRequest()发送request,request的observer会将CoAP request 返回的CoAP response包装成LwM2M response返回给客户端。
Observer类图:
Leshan-server-core
- 定义bootstrap相关的接口规范及一些默认实现类,比如BootstrapConfigStore(存储bootstrap配置信息提供给device),BootstrapSession, BootstrapSessionManager(管理BootstrapSession的生命周期),LwM2mBootstrapRequestSender等
- 定义了Model provider相关,model provider通过client的注册信息Registration获取LwM2mModel,LwM2mModel维护了一系列ObjectModel。
- StandardModelProvider加载了models目录下的model。
- 定义了queue模式相关的类,主要是QueueModeLwM2mRequestSender和PresenceServiceImpl,PresenceServiceImpl跟踪每一个通过queue模式注册到service的LwM2M client,PresenceServiceImpl维护了一个定时器,当client请求超时时,当client设置成SLEEPING状态,当有response返回时,将client设置成AWAKE状态。并且维护了一系列PresenceListener,监听以queue模式注册的这些client的状态变化
- 定义了注册registration相关的类。主要是RegistrationServiceImpl,维护了一系列的RegistrationListener和当前的registration。
- 定义了security相关的类。定义了客户端的认证信息,
- 定义了默认的客户端SecurityInfo的存储管理类FileSecurityStore。
Leshan-server-cf
- 构建LeshanBootstrapServer
- 构建LeshanServer
- 实现了默认基于内存的registration和observation的存储
- 实现了一些请求的sender
- 实现了一些resource处理请求
Leshan-client-core
- 实现了RegistrationEngine
管理注册的client的生命周期
当没有server可用时开启一个bootstrap session,有可用server时负责注册到server
定期更新client的注册信息
如果跟server沟通失败,每10秒重试一次,直到成功
当前只支持单个server
Leshan-client-cf
- 构建LeshanClient
- 实现client请求的sender
- 实现不同resource处理不同的requests