返回

ETMongoDB与Mongo驱动

简介

Mongo驱动可以直接前往Mongo官方Git下载https://github.com/mongodb/mongo-csharp-driver/tree/v2.7.x

由于ET当前5.0是使用的2.7版本驱动,所有从2.7分支下载即可

解压后在src文件夹中即可看到想要的驱动程序

至于明明官方已经有NuGet包,猫大任然要使用源码,猜测原因有二,第一个源码方便修改目标框架,第二中框架开发时出现问题源码也方便修改

关于MongoDB驱动修改与匹配,我自己是尝试了多次都没有成功,所以这里就直接把猫大修改后的驱动拿来用。

各中Mongo驱动作用介绍

  • MongoDB.Driver:顾名思义,驱动程序
  • MongoDB.Driver.Core:驱动核心
  • MongoDB.Driver.GridFS:网络传输相关
  • MongoDB.Bson:序列化、Json相关
  • MongoDB.Shared:兼容相关

MongoDB结构

  • DBProxyComponent用于非DB服务器与DB服务器进行交互的代理

  • DBComponent用于链接DB数据库和创建操作任务

    • DBTaskQueue用于保存缓存任务

      DBTask任务基类

      • DBSaveTask
      • DBSaveBatchTask
      • DBQueryTask
      • DBQueryJsonTask
      • DBQueryBatchTask

DBSaveRequestHandler

DBSaveBatchRequestHandler

DBQueryRequestHandler

DBQueryJsonRequestHandler

DBQueryBatchRequestHandler

保存/替换

一般操作方法如下:在需要保存的类上新建下面方法,需要保存的时候调用该方法就可以将要保存的类直接保存到数据库中

 public static async ETTask SaveDateToDB(this Player self)
 {
     DBProxyComponent dBProxyComponent = Game.Scene.GetComponent<DBProxyComponent>();
     await dBProxyComponent.Save(self);
 }
  1. dBProxyComponent.Save(self)方法中,会通过NetInnerComponent内网组件创建一个链接数据库服务器的内网Session。
  2. 通过该Session发送DBSaveRequest请求,并将要保存的组件传入
  3. DB服务器接收到请求后,调用DBComponentAdd方法,创建一个DBSaveTask保存任务,并将任务保存到DBTaskQueue任务队列中
  4. DBTaskQueue的Start事件中创建里一个循环,用于读取和运行任务
  5. DBSaveTask在被运行后通过DBComponentGetCollection方法获取数据库中该组件名称的数据表单,然后调用ReplaceOneAsync异步替换数据表中要保存组件ID对应的组件数据

查询

            DBProxyComponent dBProxyComponent = Game.Scene.GetComponent<DBProxyComponent>();
            Player player = await dBProxyComponent.Query<Player>(【要查询组件的ID);
Licensed under CC BY-NC-SA 4.0
0