起因
我负责开发维护的生产系统,需要通过ftp获取银行提供的银行明细入库。最近升级后,频繁曝出ftp连接异常的问题,研究了3天总算搞明白了。
现象
代码介绍
升级前
升级后
修复后
代码开发过程
我接手这个代码后,发现了一点,他仅仅在finally里面执行了disconnect方法,而没有执行logout方法。这样会导致,程序这边是断开了,ftp上却仍然维护着这个连接。
所以我在升级后,突出一个手贱,给他加上了logout方法。结果反而导致了生产环境的ftp一直连不上
运行展示
升级前
连接一个错误的ftp,两次都是没连上
升级后
连接一个错误的ftp,第二次连接居然返回了一个true
修复后
连接一个错误的ftp,两次都是没连上
升级后的版本为什么会这么诡异?
因为我引入了logout方法,导致finally里面,当clinet断开时,执行logout方法直接异常,反而没有执行disconnect方法。
disconnect方法里面的__initDefaults方法负责初始化clinet的参数。而我又把client作为一个全局变量,没有初始化client参数,直接导致第二次进入代码
connect方法,还留有上一次连接的参数,直接返回了true,没有进行连接。所以修复后把clinet作为了一个局部变量
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。