文章目录
- 一、fasdfs 通信协议
- 1. 公共命令码
- 2. 发送给storage server的命令码
- 二、fastdfs storage自定义指令码
- 1. 自定义storage server的命令码:计算文件md5
- 三、参考
一、fasdfs 通信协议
官方参考:https://mp.weixin.qq.com/s/lpWEv3NCLkfKmtzKJ5lGzQ
FastDFS采用二进制TCP通信协议。一个数据包由 包头(header)和包体(body)组成。包头只有10个字节,格式如下:
@ pkg_len:8字节整数,body长度,不包含header,只是body的长度
@ cmd:1字节整数,命令码
@ status:1字节整数,状态码,0表示成功,非0失败(UNIX错误码)
代码如下,我们看到 cmd 作者用了 char型,char只有一个字节,
char 类型也是一个标准的整数类型。但是,仅有一个单词的类型名称 char,既可以是 signed char 的同义词,又可以是 unsigned char 的同义词,这由编译器决定。因为这是由所采用的实现版本自行选择的,所以严格地说,char、signed char和unsigned char 是三种不同的数据类型。
如果程序会用到的 char 值包括小于 0 或大于 127 的情况,则应该使用 signed char 或者 unsigned char,而不是 char。
标准整数类型常见存储空间大小和取值范围
类型 存储空间大小 最小值 最大值
char (与 signed char 或 unsigned char 相同)
unsigned char 1个字节 0 255
signed char 1个字节 -128 127
typedef struct
{char pkg_len[FDFS_PROTO_PKG_LEN_SIZE]; //body length, not including headerchar cmd; //command codechar status; //status code for response
} TrackerHeader;
因此,作者的指令码都在 0-127之间。
数据包中的类型说明:
1) 整数类型采用网络字节序(Big-Endian