基于Libuv的文件更新服务器设计
目标:使用Libuv库,以TCP为基础,建立内部文件传输协议规格。 端口:4898 下载服务: 1.文件更新系统 2.文件附件系统 上传服务: 1.客户端上传文件(大小限制) 2.上传文件目录体系 3.短目录设计 消息…
C++
目标:使用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 - 网关错误