航行日志

基于Libuv的文件更新服务器设计

目标:使用Libuv库,以TCP为基础,建立内部文件传输协议规格。
端口:4898
下载服务:
1.文件更新系统
2.文件附件系统

上传服务:
1.客户端上传文件(大小限制)
2.上传文件目录体系
3.短目录设计

消息包格式:
消息包大小|消息包内容|二进制内容
只有上传和下载回应才有二进制内容部分
消息包内容以Boost做序列化,暂时以TEXT格式方便调试,以后考虑使用BIN。

传输协议规范(回应参考HTTP协议):

Request格式:
{
    "Client":Launcher,
    "Hub":"",
    "Command":"Get",
    "Filename":filename,
    "ContentBegin":0,
    "ContentEnd":0,
    "ContentLength":254889
    "Body":""
    "Message":JSON
} 

{
    "Client":Launcher,
    "Hub":"",
    "Command":"Upload",
    "Filename":filename,
    "ContentBegin":0,
    "ContentEnd":0,
    "ContentLength":254889
    "Message":JSON
    "Body":0xF33423u23i
} 

{
    "Client":Launcher,
    "Hub":"",
    "Command":"Query",
    "Filename":filename,
} 

命令:
Get 获取文件
Query 获取文件信息
Delete 删除文件
Upload 上传文件
Rename 重命名文件

Hub用于查询对应服务端实例的配置目录

Response格式:    
    如请求成功:
    {
        "State":200,
        "Filename":filename,
        "FileLength":1856899,
        "ContentLength":254889,
        "Body":73434A3459,
        "Message":JSON
        "Finish":true
    } 

    {
        "State":202,
        "Filename":filename,
        "FileLength":1856899,
        "Message":"{"MD5":FD44F1935295 ; "PATH":"D://update" }"
        "Finish":true
    } 

如果请求文件不存在:

{
    "State":-4059,
    "Error":"file not exist!",
    "Filename":filename
} 

操作成功状态码:

2**:操作成功收到,分析、接受
    200——下载成功
    201——上传成功
    202——查询文件讯息成功
    203——返回信息不确定或不完整
    204——请求收到,但返回信息为空
    205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
    206——服务器已经完成了部分用户的GET请求
    207——刪除文件成功 

服务器操作失败状态码:

5**:服务器执行一个完全有效请求失败
  500 - 内部服务器错误
  500-11 服务器关闭
  500-12 应用程序重新启动
  500-13 - 服务器太忙
  500-14 - 应用程序无效
  501 - 未实现
  502 - 网关错误