基于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。

基于LwM2M协议的Eclipse Leshan简介

Leshan-core

  • 实现了JSON, TLV, TEXT, OPAQUE四种数据格式的编码器和解码器。下图是解码器类图。

基于LwM2M协议的Eclipse Leshan简介

  • 定义了对象(Object),对象实例(ObjectInstance),资源(Resource)及他们的关系,这里有用到设计模式中的组合模式,类图如下:

基于LwM2M协议的Eclipse Leshan简介

  • 定义通用的model对象
  • 定义逻辑体之间操作的request,response对象,分上行操作和下行操作。示例是request对象的类图。

基于LwM2M协议的Eclipse Leshan简介

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类图:

基于LwM2M协议的Eclipse Leshan简介

Leshan-server-core

  • 定义bootstrap相关的接口规范及一些默认实现类,比如BootstrapConfigStore(存储bootstrap配置信息提供给device),BootstrapSession, BootstrapSessionManager(管理BootstrapSession的生命周期),LwM2mBootstrapRequestSender等
  • 定义了Model provider相关,model provider通过client的注册信息Registration获取LwM2mModel,LwM2mModel维护了一系列ObjectModel。
    • StandardModelProvider加载了models目录下的model。

      基于LwM2M协议的Eclipse Leshan简介

  • 定义了queue模式相关的类,主要是QueueModeLwM2mRequestSender和PresenceServiceImpl,PresenceServiceImpl跟踪每一个通过queue模式注册到service的LwM2M client,PresenceServiceImpl维护了一个定时器,当client请求超时时,当client设置成SLEEPING状态,当有response返回时,将client设置成AWAKE状态。并且维护了一系列PresenceListener,监听以queue模式注册的这些client的状态变化
  • 定义了注册registration相关的类。主要是RegistrationServiceImpl,维护了一系列的RegistrationListener和当前的registration。
  • 定义了security相关的类。定义了客户端的认证信息,

       基于LwM2M协议的Eclipse Leshan简介

  • 定义了默认的客户端SecurityInfo的存储管理类FileSecurityStore。

基于LwM2M协议的Eclipse Leshan简介

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

      基于LwM2M协议的Eclipse Leshan简介