CoAP网关:无连接模式问题咨询与建议

环境信息

  • EMQX 版本:5.0.8
  • 操作系统及版本:Windows Server 2019
  • 其他:测试客户端 libcoap、CoAP.NET

问题描述

问题1:上周测试了CoAP网关的【连接模式】,成功连接返回token,发布消息测试没有成功,返回Sep 19 16:02:49 ALRT got RST for message
详见# 使用libcoap与EMQX5.0 CoAP网关通讯异常

问题2:昨天测试了一下CoAP网关的【无连接模式】,发现以下问题:
1、设置MountPoint参数问题
设置MountPoint为coap/后,发布订阅消息不成功,coap://ip:port/ps/coap/test
MountPoint为空时,发布订阅消息成功,coap://ip:port/ps/test
不知道是什么原因?

2、【无连接模式】是否支持接入认证?
实测好像不支持,给错误的用户信息也能成功发布消息。

是否向下兼容EMQX4.x CoAP的写法?
coap://ip:port/ps/topic?clientid=id&username=user&password=pwd

这件事非常有意义,我们有款低功耗仪表,只有唤醒时才上报一次数据,上报完数据立即休眠,【无连接模式】非常适合这种场景,考虑到安全性,支持接入认证非常有必要。

1 个赞

感谢反馈! :heart:

  1. 设置MountPoint参数问题

不成功的时候,有日志提供么? 我们检查下

  1. 【无连接模式】是否支持接入认证?

当前设计还不支持的,如果需要认证的话,应该使用 连接模式 才对,但是其中创建链接,和保持心跳操作对设备来说是一种负担?你的场景是非常合理的,设计上我们内得讨论下。例如:
a. 配置为连接模式,按兼容 4.x 的方式,允许 创建链接+发布 使用 ps 接口一次完成,
b. 配置为无连接模式,但允许配置设备是否执行认证,其它的不变。

这样应该能满足你们的场景么?

感谢反馈,我等会儿会去调查第一个问题
对于第二个问题,和上次我提到的连接优化其实是一个问题,如果我们可以通过clientid来把不同 Socket 的数据都指向同一个会话,那么就不需要不断的创建和关闭会话了,这时连接模式和非连接模式只是表现上的不同,如果方便的话,麻烦你提供下你们的具体业务需求和期望,因为在这之前我们这边并没有太多的 CoAP 相关的反馈,所以这一块暂时是没有进行推进的

mountpoint 的我调查了,是没有问题的


注意,EMQX 不会自动在 MountpointTopic 中添加 /,如果你希望有分割符,那你的 Mountpoint 应该设置为 coap/

看了您的回复,我知道mountpoint错误的原因了,我参考https://github.com/emqx/emqx-docs/blob/release-5.0/zh_CN/gateway/coap.md文档,在请求路径中增加了coap/导致的。

谢谢。

@heeejianbo@blankalupo

目前设计的用法大概如下图所示:

如上图所示,设备唤醒后与平台发生了多次交互,

1、我比较喜欢无连接模式:正如heeejianbo所说,设备省去了创建链接、保持心跳、断开链接等操作,减少了设备功耗,流量开销,设备把精力放在业务交互本身上。

2、允许配置设备是否执行认证:设备发起请求时,网关会认证请求者的身份,网关可以采用懒加载模式把用户信息缓存在内存中,以实现快速验证,在coap网关中创建的用户不会太多,大概是一型一密。

3、数据上报至EMQX Broker后,需要把实时数据存储到时序数据库中,准备采用web hook、mqtt sink或其它方案,还没有考虑好,两位大咖有推荐的方案吗?还望不吝赐教。

期待发布新版本!