public IPEndPoint LocationAddress; public int AppId;
我们看到,这里存放了IP地址跟服务器AppId。这很可能是一个存放并且供别人识别服务器地址的组件。
public void Awake() { StartConfigComponent startConfigComponent = Game.Scene.GetComponent<StartConfigComponent>(); this.AppId = startConfigComponent.StartConfig.AppId; StartConfig startConfig = startConfigComponent.LocationConfig; this.LocationAddress = startConfig.GetComponent<InnerConfig>().IPEndPoint; }
我们看到,这里获取了这个服务的启动配置。保存了AppId,这个是服务器Id,是唯一的。并且在startConfig里面获取到的Location既地址服务器的启动配置,其中的InnerConfig则储存了地址服务器提供的与其他服务器传输数据的IP地址。
NetInnerComponent
我们之前有学过NetOuterComponent,跟NetInnerComponent很像,那Inner有什么不同呢?最重要的,Inner没有订阅Awake跟Update方法,也就是说Inner起到的作用更多的是创建Session,而不是更新Session。
2018/4/12 对不起,我尽然肤浅地以为NetInnerComponent只有这么点功能,大家随我去另一个笔记。(它在热更的程序集里还有扩展方法T T)
public readonly Dictionary<IPEndPoint, Session> adressSessions = new Dictionary<IPEndPoint, Session>();1
大胆猜测,Inner应该是存放与其他服务所在服务器的对话信息的组件。ET既然是分布式的服务框架,那一定会有服务器与服务器之间的通信,还有服务器与客户端的通信,而这个,很可能就是服务器与服务器之间的通信,翻译过来也像嘛哈哈。
虽然不知道猜的对错,但总比毫无头绪的好。之后再验证我们的想法,现在,我们就认为NetInnerComponent的作用就是这个。
adressSessions就是存放与其他服务所在服务器回话信息的字典。并且通过Get方法进行修改。
/// <summary> /// 从地址缓存中取Session,如果没有则创建一个新的Session,并且保存到地址缓存中 /// </summary> public Session Get(IPEndPoint ipEndPoint) { if (this.adressSessions.TryGetValue(ipEndPoint, out Session session)) { return session; } session = this.Create(ipEndPoint); this.adressSessions.Add(ipEndPoint, session); return session; }
2018/4/16续写
到现在,基本看过来了ET框架内大部分的代码。懂得了更多的知识,这里再对这个组件进行补充,之前学到一半尽然忘记了。
看过LocationComponent学习笔记,我们对这个Add方法有了更深的理解。原来,这个方法就是往地址服务器注册实体所在服务器的方法。
的确,证实了我们之前的想法。
所有需要用到分布式服务器的实体对象,都会把自己的ID跟自己所在的服务器Id储存到地址服务器上,之后其他服务器想向这个实体对象发送消息或者请求,就可以通过ID向地址服务器发送获取请求,得到实体对象所在的服务器,再往这个服务器上发送想发送的数据即可精准定位到这个实体对象。