最近ET6.0框架越发趋于完善,剩下的基本上都是小改动,ET6.0相比5.0新增了机器人框架,简易AI框架,协程锁(超时处理),更加精简的ETTASK等等。
之前都是读源码的方式来解读5.0,6.0打算从使用的角度来解读(当然也会附带说下核心的代码)
ET6.0服务器启动,需要依靠几个默认的配置表,如下图:
每个表的作用:
按照ETBOOK以及论坛里面的方法,对Client-Server.sln解决方案,重新生成解决方案,如下图:
为了验证功能,我们增加一个进程配置:
然后把所有StartSceneConfig表里面的配置改成2,这样所有服务都在2号进程启动。
切换配置表导出工具,跑一下:
备注:最新ET6.0已经去掉下面的项目,需要用命令行方式,或修改启动参数为:
–AppType=ExcelExporter 才能正确启动导出配置工程
出现下面情况,则导表成功。
备注:如果导表失败,可能由于EXCEL的备份文件存在,把隐藏文件夹打开删除那些备份的,或者改代码去掉~开头的文件。
切换回Server.App项目,配置启动参数(我这里用的Visual Studio)。也可以通过命令行的方式启动,并传入参数。
我们看看有哪些参数可以传,直接打开Options类,可以看到里面带有Option特性的都是可以解析出来的参数,且使用的长名称,且有默认值,所以不配置走默认的,也可以启动APP,但是为了理解ET6.0我们需要配置参数。
这里我们假设启动的是2号进程,所以传入参数 --Process 2
配置好后,直接启动,没有报错,启动成功。
查看日志文件启动成功,都启动成功,说明启动的2号进程,里面配置的所有服都启动成功:
为了测试,我们把Gate2配置为1号进程,再次启动看看日志如下,只有Gate1启动了:
这个类主要功能:
SynchronizationContext.SetSynchronizationContext(ThreadSynchronizationContext.Instance);
Game.EventSystem.Publish(new EventType.AppStart());
这个类继承了AEvent
用于创建各个Scene实体类,核心代码如下:
public static async ETTask<Scene> Create(Entity parent, long id, long instanceId, int zone, string name, SceneType sceneType, StartSceneConfig startSceneConfig = null)
{
await ETTask.CompletedTask;
Scene scene = EntitySceneFactory.CreateScene(id, instanceId, zone, sceneType, name, parent);
scene.AddComponent<MailBoxComponent, MailboxType>(MailboxType.UnOrderMessageDispatcher);
switch (scene.SceneType)
{
case SceneType.Realm:
scene.AddComponent<NetKcpComponent, IPEndPoint>(startSceneConfig.OuterIPPort);
break;
case SceneType.Gate:
scene.AddComponent<NetKcpComponent, IPEndPoint>(startSceneConfig.OuterIPPort);
scene.AddComponent<PlayerComponent>();
scene.AddComponent<GateSessionKeyComponent>();
break;
case SceneType.Map:
scene.AddComponent<UnitComponent>();
scene.AddComponent<RecastPathComponent>();
break;
case SceneType.Location:
scene.AddComponent<LocationComponent>();
break;
}
return scene;
}
现在服务器已经启动好了,剩下的只需要,定义好协议,注册好协议处理类,进行逻辑开发就可以愉快的开发下去了。
本篇只针对服务器启动如何配置启动,且记录了几个核心启动相关的类,进行了说明,下一篇从第一个登录协议讲解开始。
补充说明:猫大增加了守护进程的方式启动各个服务器,需要增加–AppType Watcher启动参数,用于通过守护进程来启动所有服务进程,同时也可以增加其他功能