场景:
CMS系统部署,当时采用Nginx和Tomcat架构,即静态文件放在Nginx部署的服务器上,后台动态代码(cms后台管理系统class)部署在另一台Tomcat服务器上。Tomcat部署的系统,在文章发布后生成的静态页面文件(HTML文件等),需要拷贝到Nginx服务器上(最佳方案是两台服务器共享存储)。要求:
解决思路:
- 使用python3 开发,方便快捷,主要的服务器都是Linux版本
- Tomcat服务中需要同步的根文件夹,只要有文件改动(新增、修改、删除)都发起同步
遇到问题:
- 客户端怎样实时监控文件变化
- 在创建文件时,监控发现触发两次文件修改方法
- 文件内容较大时,还没有复制完,就开始触发socket传递,使得文件发送失败(因为文件还没有修改完)
- 服务器端和客户端都能实现循环等待
解决方案:
- 客户端监控文件变化是根据系统不同,使用的插件不同。在Windows系统中使用win32file
- 设置可以传递文件的大小
- 设置等待时间,即等待文件创建或者修改完后,才能socket传递
- 服务器端:接收文件名称、创建文件、保存文件、继续等待..
代码实现
客户端代码
服务端代码
|
|
总结
- 文件操作和操作系统有关,不同系统调用底层的库是不一样的
- 现在只实现了windows 版本,且只是在win10系统测试通过
- 单个文件传输有大小限制
- 监控文件变化时,与文件修改写入的时间有冲突,socket发起传递时,一定是文件操作关闭了才可以,不然会报错误。
- 后续计划:
- 实现Linux版本
- 实现打包传递
- 实现超大文件传递