开发者社区> 问答> 正文

GPRS设备使用MQTT连接服务器问题

我司正在移植aliyun iot sdk到我司的GPRS iot设备上,以便让其支持aliyun MQTT 服务器;
目前已经build pass;在测试过程遇到了mqtt connect问题,即mqtt-example.c中mqtt_client例子, 在执行IOT_MQTT_Construct失败了;
通过log发现,在建立ssl连接之后不久,便收到了服务器发来的FIN关闭连接;
目前mqtt-example在ubuntu PC上测试是正常的, 但是若在建立ssl连接之后与发送CONNECT MQTT请求之间, 让其延迟10s(修改mqtt_client.c 中的MQTTConnect方法,在Send之前让其sleep 10s, 以便模仿gprs这类速度较慢的设备), 那么也会出现连接被关闭, 测试失败的情况;
这就可以解释GPRS iot模块上mqtt connect失败的原因;
即 aliyun服务器对建立ssl连接之后, 10s内未收到connect连接,则会把连接关闭;
而我们的iot模块由于走 GPRS网络会比较慢;

请问该如何处理这个问题,让我们的GPRS iot设备可以连接上 MQTT服务器?

展开
收起
linzhonxue 2017-11-15 10:47:40 5293 0
2 条回答
写回答
取消 提交回答
  • 回 1楼魔咒626的帖子
    多谢,我们使用wifi模块测试通过了;
    对于GPRS设备,尝试过设置keepAlive设置为180(最大值),但是没有用
    其实mqtt connect请求包还没发送出去,就已经收到connection close了;
    多谢帮忙
    2017-11-16 10:46:38
    赞同 展开评论 打赏
  • 看下这个方法是否有帮助?
    在进行MQTT CONNECT协议设置的时候,
    Connect指令中的KeepAlive时间需要设置超过60秒以上,否则会拒绝连接。
    如果同一个设备多个连接可能会导致客户端互相上下线,MQTT默认开源SDK会自动重连,您可以通过日志服务看到设备行为。

    https://help.aliyun.com/document_detail/30539.html?spm=5176.doc30568.6.574.16r6gh
    2017-11-16 02:31:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
RocketMQ Client-GO 介绍 立即下载
RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载