文件上传更新服务相关

需求:
  客户端向服务端发送一次请求,请求是一系列配置文件的文件名、当前客户端所持有文件的版本号、期待服务端返回的数据形式(url或二进制数据)。当请求的配置文件有更新,服务端返回相应的url或二进制数据。之所以要分url和二进制数据,因为有的配置文件比较小且比较重要需要马上获取到数据;而有的配置文件稍微大一些,重要性比较低,可以在客户端拉线程慢慢下。

最终实现:
  分为后台管理系统(负责文件上传)和数据更新服务。
  文件上传部分是用Vue.js+KOA实现。其中关于文件上传那块,浏览器端使用Ajax发送FormData;Node那块之前是用co-busboy模块处理文件,body-parser模块基于co-body不支持文件数据(TODO1:之后研究HTTP协议,需要回头看看这块代码),在官方示例中是用pipe将formData文件流直接导入磁盘文件中(TODO2:出现了文件数据成功写入本地磁盘却没有存入数据库的情况),但是当我想直接用变量保存文件数据时,上传多文件却只能接受到一个文件的数据(TODO3:查明原因,需要了解流的相关知识)。调用SQL语句存储数据时借鉴了ORM的设计思想以及js面向对象编程的思想(TODO4:ORM实现十分粗糙,需要优化)。由于文件大小有限,也没有(TODO5)考虑断点续传和秒传。
  更新服务大概思路是服务不断的扫描数据库,将新版本数据载入内存(数据总量不大),并暂时使用Nginx做文件服务器,后期接入CDN。达到快速响应的目的。

收获:

  1)写后台管理系统的时候,最初是以文件的形式保存在服务器上,没有考虑文件备份、多机部署的问题。(TODO6:了解分布式文件存储系统),简单的方法就是用MYSQL保存文件数据,数据备份和多机部署方便,但这也只适合数据比较小的情况。最终还是要用分布式文件存储。(TODO7:Redis使用hmset等命令同样能达到目的),由于对性能要求不高,故没有采用Redis方案。

  2)学会了使用事务来进行多表(有关联性)操作

 

TODO:

  TODO8:之前理解的文件服务是后端实时读取文件数据并返回数据,但这样不适合生产环境。需要参考和学习Nginx文件服务的实现机制

  TODO9:使用JS处理Pb协议

  

posted @ 2017-03-11 22:19  cqq626  阅读(316)  评论(0编辑  收藏  举报