Eclipse Leshan 常见问题解答 (FAQ) 笔记

发布于:2025-04-07 ⋅ 阅读:(16) ⋅ 点赞:(0)

本笔记基于 Eclipse Leshan Wiki - F.A.Q. 页面内容,旨在解答关于 Eclipse Leshan(一个开源的 LwM2M 服务器和客户端 Java 实现)的常见问题,帮助您更好地理解和使用该工具。

一、Leshan 是什么,我该如何使用它?

Leshan 是由 Eclipse 基金会开发的 OMA LwM2M(轻量级机器对机器) 协议的 服务器和客户端的 Java 实现

  • 注意: Leshan 不是一个独立的服务器或客户端,而是一组 Java 库,帮助开发者构建自己的 LwM2M 服务器和客户端应用程序。
  • 使用方式:
    • 要使用 Leshan,您需要 编写 Java 代码,利用其提供的 API 来实现设备管理功能。
    • Leshan 提供了丰富的功能,包括设备注册、数据传输、固件更新、观察机制等。

二、我可以重用 leshan-*-demo 项目吗?

Leshan 演示项目 (leshan-*-demo) 是探索 LwM2M 协议或快速测试互操作性的好工具,但 不建议将其用于生产环境。原因如下:

  • 演示性质: 这些项目仅用于演示目的,缺乏生产环境所需的可扩展性、可靠性和安全性。
  • 缺乏优化: 代码可能没有针对性能进行优化,且在不同版本之间可能会有重大变化。
  • 潜在风险: 使用演示代码可能会引入安全漏洞或功能缺陷。

建议:

  • 学习用途: 可以参考演示项目的代码来了解 Leshan API 的使用方式。
  • 生产环境: 根据具体需求,基于 Leshan 库从头开始构建您的应用程序,以确保其满足生产环境的要求。

三、Leshan-*server-demo 是否有 REST API?

是的,Leshan-server-demo 提供了一个 REST API,但 不建议在生产环境中使用

  • 用途: 该 API 主要用于支持 Web UI 演示项目。
  • 不稳定性: 该 API 可能在任何时候发生变化,包括在次要版本或错误修复版本中。
  • 替代方案: 如果您需要使用 REST API,建议基于 Leshan 提供的 API 自行构建符合您需求的接口。

访问方式: http://yourhost:8080/api/

探索方法: 使用浏览器的 Web 开发工具(例如 Firefox)查看使用 Leshan-server-demo Web UI 时发送的 REST 请求。

四、如何增加日志输出?

Leshan 使用 SLF4J(简单日志门面) 作为日志接口,这意味着您可以使用任何兼容的日志后端。

  • Leshan 演示项目: 使用 Logback 作为日志后端。
    • 版本 2.0.0-M5 及之后: 提供了一个详细程度选项(-v, -vv, ...)来调整日志级别。
      • 示例: 使用 -vv 选项可以增加日志详细程度。
    • 调整日志级别: 可以参考 此讨论 或阅读 Logback 文档 来进行更详细的配置。
  • 旧版客户端演示项目 (2.0.0-M5 之前): 使用 Simple Logger 作为日志后端。

五、如何添加新对象?

请参阅 添加新对象 页面,了解如何在 Leshan 中定义和添加自定义 LwM2M 对象。

六、请求超时是如何工作的?

请参阅 请求超时 页面,了解 Leshan 中请求超时的机制和配置方法。

七、Leshan 服务器重启后会发生什么?

请参阅 服务器故障转移 页面,了解 Leshan 服务器重启后的行为以及如何处理客户端重新连接和数据恢复。

八、所有与 LWM2M 观察相关的问题

请参阅 LWM2M 观察 页面,了解 LwM2M 观察机制的工作原理,包括如何订阅资源变化、接收通知以及处理观察生命周期。

九、设备的 IP 地址/端口发生变化,我该如何处理?

请参阅 具有动态 IP 的 LWM2M 设备 页面,了解如何处理设备 IP 地址或端口的变化,例如使用 NAT 穿透技术或动态 DNS 服务。

十、我可以配置设备的唤醒时间(队列模式)吗?

  • 队列模式: 当设备处于休眠状态时,Leshan 服务器会将消息存储在队列中,等待设备唤醒后发送。
  • 唤醒时间: 默认值为 93000 毫秒,但您可以更改此值,例如:
     

    java

    取消自动换行

    复制

    builder.setClientAwakeTimeProvider(new StaticClientAwakeTimeProvider(60000));
    
  • 动态配置: 您可以参考 此处 了解如何为每个客户端动态配置唤醒时间。

十一、如何在集群中使用 Leshan 服务器?

请参阅 在集群中使用 Leshan 服务器 页面,了解如何在集群环境中部署 Leshan 服务器,包括负载均衡、数据同步和故障转移等。

十二、我可以在 Android 上使用 Leshan 吗?

  • 兼容性: Leshan 开发团队没有在 Android 上进行过测试,但为了确保兼容性,他们启用了 animal-sniffer-maven-plugin,以确保没有使用 Android 中不存在的类。
  • 已知项目: 已知有一些项目/演示在 Android 上使用 Leshan,例如 leshan-android-demo 和 LwM2MDemoClientAndroid
  • 详细信息: 有关更多信息,请参阅 问题 #573

十三、Leshan 会支持 LWM2M 1.1 吗?

请参阅 问题 #1234 了解 Leshan 对 LwM2M 1.1 的支持情况。

十四、MQTT 和 LWM2M 有什么区别?

1.

协议层次:

  • LwM2M 和 MQTT 不在同一层次上,将 CoAP 与 MQTT 进行比较更为合适。
  • MQTT 只是一个通信协议,不定义数据含义,而 LwM2M 则定义了设备、位置、固件更新、引导设备等概念。
  • 这使得 MQTT 更加灵活,但与 LwM2M 相比,互操作性较差。
  • LwM2M 1.1 引入了基于 CoAP+tcp 的 LwM2M,LwM2M 1.2 则引入了基于 MQTT 和 HTTP 的 LwM2M。

2.

主要用途:

  • LwM2M 主要用于设备管理,但也可用于应用程序管理。
  • MQTT 只是一个发布/订阅协议。

3.

传输层支持:

  • 在 LwM2M 1.0 中,仅支持 CoAP,这意味着 LwM2M 运行在 UDP(DTLS) 上,而 MQTT 运行在 TCP(TLS) 上。
  • 但在 LwM2M 1.1/1.2 中,还支持 CoAP+tcp、MQTT 和 HTTP 作为 LwM2M 传输层。(仍然存在非 IP 传输层)

4.

适用环境:

  • 理论上,使用 CoAP over UDP 应该使 LwM2M 更适合受限环境。
  • 在现实世界中,如果(仅当)您开始使用所有可用功能(CoAP 观察/CoAP 分块传输/DTLS 角色交换等),这可能并不完全正确。

5.

数据发送:

  • 在 LwM2M 1.0 中,主要由服务器发送请求,例如 READ、WRITE。
  • 如果需要从设备向服务器发送数据,这并不太适用。
  • 您可以尝试使用 OBSERVE,但 这并不是很好
  • LwM2M 1.1 通过添加 SEND 请求 解决了这个“问题”(从设备到服务器)。

    十五、如何使用 Leshan 下载固件包?

    请参阅 使用 CoAP 分块传输大文件? 页面,了解如何使用 Leshan 实现固件包下载。

    十六、贡献

    请注意,您对 Eclipse 网站(包括本 Wiki)的所有贡献都受 使用条款 的约束,因此请花时间仔细阅读。您与 Eclipse 基金会 Web 属性的交互以及您可能提供的任何关于您自己的信息都受 隐私政策 的约束。


    通过以上内容,您可以更深入地了解 Eclipse Leshan 的功能、使用方法以及常见问题的解决方案,从而更好地利用该工具进行 LwM2M 设备管理应用程序的开发。