MongoDB源码阅读之通信协议(一)

MongoDB采用Wire Protocol进行client-server通信,该协议基于socket的request/response模型。每个操作都由包含消息头的Message表示,消息头包含长度、请求ID、数据库ID和操作类型。MongoDB通过Message类处理客户端消息,并使用MyMessageHandler接收和处理,如创建、删除、更新等操作。复杂的Command操作涉及多种数据库、集合、副本集和分片命令,注册在CommandMap中,通过权限检查和Run()函数执行。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值