Norman_Lin的博客

个人游戏开发学习博客

ET框架---LocationProxyComponent学习笔记

LocationProxyComponent

请大家关注我的微博:@NormanLin_BadPixel坏像素


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>();

大胆猜测,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向地址服务器发送获取请求,得到实体对象所在的服务器,再往这个服务器上发送想发送的数据即可精准定位到这个实体对象。

阅读更多
上一篇ET框架---ActorProxyComponent学习笔记(ActorProxy)
下一篇ET框架---BenchmarkComponent学习笔记
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭