当前位置:   article > 正文

fastdfs-通信协议-自定义指令码拓展_fastdup自定义

fastdup自定义

一、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错误码)
  • 1
  • 2
  • 3

代码如下,我们看到 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 header
	char cmd;    //command code
	char status; //status code for response
} TrackerHeader;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

因此,作者的指令码都在 0-127之间。

数据包中的类型说明:

1) 整数类型采用网络字节序(Big-Endian),包括4字节整数和8字节整数;

2) 1字节整数不存在字节序问题,在Java中直接映射为byte类型,C/C++中为char类型;

3) 固定长度的字符串类型以 ASCII码0结尾,对于Java等语言需要调用trim处理返回的字符串。变长字符串的长度可以直接拿到或者根据包长度计算出来,不以ASCII 0结尾。

tracker_proto.h 中定义所有命令码。

下面将列举client发送给FastDFS server的命令码及其body(包体)结构

1. 公共命令码

  • FDFS_PROTO_CMD_ACTIVE_TEST:激活测试,通常用于检测连接是否有效。客户端使用连接池的情况下,建立连接后发送一次active test即可和server端保持长连接。

    #请求body&#

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/745177
推荐阅读
相关标签
  

闽ICP备14008679号