MongoDB wire protocol
MongoDB通过一种特殊的client/server 之间的协议:wire protocol。它是一种基于socket的request/response之间的通信协议。用户通过mongo shell或者driver API, 进行创建、删除、更新以及执行管理操作的命令, 都会产生一个Message, 用来表示该操作需要的信息。 每一个消息, 都有一些公共的部分, 被称作MsgHeader, 它分别记录了消息体的长度, 当前消息的requestId, 目的端的database ID, 以及代表操作的类型, 比如创建、删除等。
struct MsgHeader {
int32 messageLength; // total message size, including this
int32 requestID; // identifier for this message
int32 responseTo; // requestID from the original request
// (used in responses from db)
int32 opCode; // request type - see table below for details
}
在代码里面, 通过Message类, 来接受客户端传入的信息,具体的代码实现可以参考: src/mongo/Util/Net/message.h
在MongoDB的main函数里面, 会创建一个MyMessageHandler 对象, 由它来接收所有的来自于客户端的消息:
class MyMessageHandler : public Message