今天遇到一个问题,是手机端发送控制指令,快速来回修改设备参数,app显示失败。
原因是设备端收到app消息后,回调函数调用set函数进行值的修改,成功返回0失败返回1,并调用另一个函数,将结果发送给app。
但是set函数内部,有针对变更的判定,即只有状态量发生了改变,才会返回0。这里的定义有问题,因为get,set这类函数,要足够纯粹,执行成功就返回0,不应该把是否变更这种内容带入返回值中。
但是网络的不稳定性导致可能出现乱序,比如“开关开关开关”发送后变成了“开开关关开关”,那么连续两次相同的set会导致后一次返回1,造成异常。