AIR202模块配合ONENET平台发送心跳包失败问题

[2018-10-23 08:42:06.827]: [I]-[mqtt.client:checkKeepAlive] pingreq send fail [2018-10-23 08:42:06.827]: [D]-[mqtt.client:write] C000 2 [2018-10-23 08:42:06.827]: [W]-[socket.client:send] error 6, SEND FAIL

现实用AIR202_S5最小系统板做一个小开发,配合移动的onenet物联网平台。

air202的开发使用lua脚本,对mqtt的配置如下:

local subTopic = "/lock/176766/45967572/get" --设备端需要订阅的topic
local mqttIp,mqttPort = "mqtt.heclouds.com","6002" --定义onenet的服务器域名和端口
local clientId = "xxx" --在onenet平台创建设备时,系统自动生成的设备id
local userName = "xxx" --在onenet平台创建设备时,系统生成的产品id
local passWord = "xxxx=" --onenet平台的APIkey
local keepAlive = 600


上面的keepAlive单位是秒,也就是多少秒后发送心跳包来保持长连接。

设备启动后,一切正常,然而在10分钟(600秒)后,LuaTool界面提示错误日志如下:

[2018-10-23 08:42:06.827]: [I]-[mqtt.client:checkKeepAlive] pingreq send fail

[2018-10-23 08:42:06.827]: [D]-[mqtt.client:write] C000 2

[2018-10-23 08:42:06.827]: [W]-[socket.client:send] error 6, SEND FAIL


当出现上面错误提示的时候,AIR202会重连,也会连接成功,经过多次观察,发现重连成功后10分钟又再次出现该问题,这样是严重影响正常使用的。

上面问题周期性出现,且间隔都是10分钟,因此基本可以断定,是模组每隔600s发送心跳包,但是发送失败了。

模组使用的是移动的手机卡,考虑到mqtt是基于tcp的长连接,要想维持长连接必须间隔性的发送心跳包来告诉运行商,这个tcp连接我还要用,不要给我切断,所以怀疑是不是600秒发一次心跳包时间间隔太久了呢?

于是,将600s,修改为120s,也就是让模组每隔2分钟就发心跳包,然后进行测,问题得以解决。


总结:

[2018-10-23 08:42:06.827]: [I]-[mqtt.client:checkKeepAlive] pingreq send fail

[2018-10-23 08:42:06.827]: [D]-[mqtt.client:write] C000 2

[2018-10-23 08:42:06.827]: [W]-[socket.client:send] error 6, SEND FAIL

出现上面问题的原因,与模组无关,与onenet物联网平台无关,只跟自己程序里心跳包发送间隔时间太长有关,时间改短点。

有人会觉得心跳包间隔时间短,那发送频率高,多么浪费流量啊?其实不然,你长时间不发送数据,你即使发送几个字节,那么运营商也会按照1K来计算的。

















  • 发表于 2018-10-23 09:22
  • 阅读 ( 3217 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
老张

知识搬运工

14 篇文章

作家榜 »

  1. 技术销售Delectate 43 文章
  2. 陈夏 26 文章
  3. 国梁 24 文章
  4. miuser 21 文章
  5. 晨旭 20 文章
  6. 朱天华 19 文章
  7. 金艺 19 文章
  8. 杨奉武 18 文章