这个目录下主要对rpc做一些源码解读以及分析。
本文主要分析constants.h constatns.cc
#ifndef KUDU_RPC_RPC_CONSTANTS_H
#define KUDU_RPC_RPC_CONSTANTS_H
#include <cstdint>
#include <set>
#include "kudu/rpc/rpc_header.pb.h"
namespace kudu {
namespace rpc {
//都是一些常量
// Magic number bytes sent at connection setup time.
extern const char *const kMagicNumber;
//声明全局变量const char* const kMagic 但未定义
//无法修改指针以及内容
// App name for SASL library init
extern const char *const kSaslAppName;
//应用名用于sasl库初始化
//SASL全称Simple Authentication and Security Layer,
//是一种用来扩充C/S模式验证能力的机制。
//rpc涉及到clienet调用server 加验证更安全 以免被没有认证的客户端调用
// Network protocol name for SASL library init
extern const char *const kSaslProtoName;
//sasl初始化用到的网络协议名
// Current version of the RPC protocol.
static const uint32_t kCurrentRpcVersion = 9;
//当前的rpcversion协议版本号为9
// From Hadoop.
static const int32_t kInvalidCallId = -2;
static const int32_t kConnectionContextCallId = -3;
static const int32_t kNegotiateCallId = -33;
static const uint8_t kMagicNumberLength = 4;
static const uint8_t kHeaderFlagsLength = 3;
//非法调用id-2
//链接上下文调用id-3 不懂 回头看的时候再来解释
//协议调用id -33 不懂
//魔数字段长度为4字节
//头标记长度为3 不懂
// There is a 4-byte length prefix before any packet.
static const uint8_t kMsgLengthPrefixLength = 4;
//报文长度用4个字节表示
// The set of RPC features that this server build supports.
// Non-const for testing.
extern std::set <RpcFeatureFlag> kSupportedServerRpcFeatureFlags;
//服务端这边支持的rpc特性集合
// The set of RPC features that this client build supports.
// Non-const for testing.
extern std::set <RpcFeatureFlag> kSupportedClientRpcFeatureFlags;
//客户端这边支持的rpc特性
} // namespace rpc
} // namespace kudu
#endif // KUDU_RPC_RPC_CONSTANTS_H
看完了constant.h 但是有些陌生名词还是比较难猜测其具体含义,可能在别的rpc组件实现中会用到这些常量。
constant.cc更加简洁:
#include "kudu/rpc/constants.h"
using std::set;
namespace kudu {
namespace rpc {
const char *const kMagicNumber = "hrpc";
const char *const kSaslAppName = "kudu";
const char *const kSaslProtoName = "kudu";
//为之前的声明全局变量符号做定义
//遵循头文件声明 cpp定义的规则
// NOTE: the TLS flag is dynamically added based on the local encryption
// configuration.
//
// NOTE: the TLS_AUTHENTICATION_ONLY flag is dynamically added on both
// sides based on the remote peer's address.
set <RpcFeatureFlag> kSupportedServerRpcFeatureFlags = {APPLICATION_FEATURE_FLAGS};
set <RpcFeatureFlag> kSupportedClientRpcFeatureFlags = {APPLICATION_FEATURE_FLAGS};
//flag集合 APPLICATION_FEATURE_FLAGS
//这个宏里面定义了哪些flags呢 暂时没找到
} // namespace rpc
} // namespace kudu
总的来说 通过这两个文件看不出什么,还是请期待下面的系列。