情景说明:
采购中吉自动售货机,自研对接java代码对接,使用netty方式。(注:有需要对接java对接中吉设备代码的可以关注我们的公众号,联系我们。
对接中吉自动售货机,下发 出货指令,要等 1- 2 分钟。
从收到出货命令到,到收到出货命令的反馈,一共花了40秒,有的时候还达到90秒左右。
如果有碰到关于中吉问题。
可以公众号关注,云数加盟。===》 回复:转人工。会有专门的人工给您解答问题。
通过日志发现,通信的延迟问题不大,因为收到出货命令的是很快的,但是我联系客服,客户一会让我把天线往外放,一会让我换流量卡。
后面联系了中吉的实施工程师,他问了一个问题:是偶尔出货慢还是百分百出货慢。
我看了一下。是百分百出货慢,他就断定不是硬件问题,是程序问题。我没办法,回归查找代码问题(对接代码不是我写的)。
通过日志对照,中吉的接口文档,我发现 3000的命令(远程出货的命令响应了很久),像是写入netty,netty的反应上出现了问题。
后面发现,是因为wirte后没有去 flush 。
flush 性能考虑:
不总是需要:通常情况下,流会自动缓冲数据,当缓冲区满或者流关闭时,数据会被自动刷新到目标位置。
提高效率:如果不需要立即看到数据输出结果,可以避免频繁调用 flush 来提高写入效率。
同步保证:
必要时调用:如果你需要确保所有数据都被立即写入到目标位置(例如日志文件),则应该调用 flush 方法。
资源管理:
关闭时自动刷新:即使没有显式调用 flush,在关闭流时也会自动刷新缓冲区中的数据。
结论:加上 chennel.flush(),问题顺利解决。
博主新推出的gitee免费开源项目(商城+APP+小程序+H5),有兴趣的小伙伴可以了解一下。
生鲜商城kxmall-小程序 + App + 公众号H5: kxmall-生鲜商城+APP+小程序+H5。同时支持微信小程序、H5、安卓App、苹果App。支持集群部署,单机部署。可用于B2C商城,O2O外卖,社区超市,生鲜【带配套骑手端配送系统】。kxmall使用uniapp编码。使用Java开发,SpringBoot 2.1.x框架,MyBatis-plus持久层框架、Redis作为缓存、MySql作为数据库。前端vuejs作为开发语言。https://gitee.com/zhengkaixing/kxmall