ET MongoDB与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);
}
- 在
dBProxyComponent.Save(self)
方法中,会通过NetInnerComponent
内网组件创建一个链接数据库服务器的内网Session。 - 通过该Session发送
DBSaveRequest
请求,并将要保存的组件传入 - DB服务器接收到请求后,调用
DBComponent
的Add
方法,创建一个DBSaveTask
保存任务,并将任务保存到DBTaskQueue
任务队列中 - 在
DBTaskQueue
的Start事件中创建里一个循环,用于读取和运行任务 -
DBSaveTask
在被运行后通过DBComponent
的GetCollection
方法获取数据库中该组件名称的数据表单,然后调用ReplaceOneAsync
异步替换数据表中要保存组件ID对应的组件数据
查询
DBProxyComponent dBProxyComponent = Game.Scene.GetComponent<DBProxyComponent>();
Player player = await dBProxyComponent.Query<Player>(【要查询组件的ID】);
网友评论