ET框架-服务端-NetOuterComponent学习笔记

原创 2018年04月17日 16:56:18

NetOuterComponent

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


namespace Model
{
    public class NetOuterComponent: NetworkComponent
    {
    }
}

空空如也。有了之前的教训,这次我特意去找了找有没有扩展方法。果然不出所料。

public static class NetOuterComponentEx

我们看到,同客户端一样,也订阅了AwakeUpdate事件,并且有一个带参数的Awake方法,参数是IP地址。

public static void Awake(this NetOuterComponent self, IPEndPoint ipEndPoint)
{
    self.Awake(NetworkProtocol.TCP, ipEndPoint);
    self.MessagePacker = new ProtobufPacker();
    self.MessageDispatcher = new OuterMessageDispatcher();
}

从这里我们知道,它对消息的打包工具是ProtobufPacker,消息调度器是OuterMessageDispatcher

OuterMessageDispatcher

我们首先来对比一下服务端和客户端接收到消息后需要做的处理。

客户端在接收到消息后,只要在自己的mono层跟热更层进行调度就可以了,但是,如果服务端接收到客户端的消息,除了在自己管理的服务层进行消息调度外,客户端发送的消息还有可能需要我们去访问其他的服务器,这个时候,就需要我们服务器之间的通讯。这就需要用到我们之前学习的Actor方面的知识。(Actor我们还没学全呢。)

// gate session收到actor消息直接转发给actor自己去处理
if (message is IActorMessage)
{
    long actorId = session.GetComponent<SessionUserComponent>().User.ActorID;
    ActorProxy actorProxy = Game.Scene.GetComponent<ActorProxyComponent>().Get(actorId);
    actorProxy.Send((IMessage)message);
    return;
}

// gate session收到actor rpc消息,先向actor 发送rpc请求,再将请求结果返回客户端
if (message is IActorRequest aActorRequest)
{
    long actorId = session.GetComponent<SessionUserComponent>().User.ActorID;
    ActorProxy actorProxy = Game.Scene.GetComponent<ActorProxyComponent>().Get(actorId);
    IResponse response = await actorProxy.Call(aActorRequest);
    session.Reply(packetInfo.RpcId, response);
    return;
}

我们发现,ET框架里面的消息类型真的太多了,我想写一个关于消息类型的笔记

经过上面笔记的洗礼,大家对这里为什么要这样处理消息应该都明了了吧哈哈。不过我们还得来看看它是怎么定位ActorProxy的。

我们看到,当客户端往服务端发送消息时,通过Session就可以标识客户端,但是服务端再发送给其他服务器时,就得重新包装一下了,这个时候,Session已经是服务器与服务器对话的Session了,我们要额外保存能标识客户端的数据。

ET框架---NetOuterComponent

NetOuterComponent 请大家关注我的微博:@NormanLin_BadPixel坏像素 这个应该是跟网络相关了,看了这么久的代码,终于要开始接触网络了吗,想想还有点小激动呢。废话...
  • Norman_Lin
  • Norman_Lin
  • 2018-04-03 15:57:24
  • 11

开源分享 Unity3d客户端与C#分布式服务端游戏框架

很久之前,在博客园写了一篇文章,《分布式网游server的一些想法语言和平台的选择》,当时就有了用C#做网游服务端的想法。写了个Unity3d客户端分布式服务端框架,最近发布了1.0版本,取名ET框架...
  • ff55fff
  • ff55fff
  • 2017-09-09 16:01:59
  • 646

ET框架-服务端-Program学习笔记

Program学习笔记 请大家关注我的微博:@NormanLin_BadPixel坏像素 在写服务端之前,我是先看的客户端代码。而ET框架,服务端和客户端的代码很多都是共用的,这也是ET方便的...
  • Norman_Lin
  • Norman_Lin
  • 2018-04-18 16:21:15
  • 4

ET-MVC框架

  • 2015年05月28日 09:05
  • 2.51MB
  • 下载

epoll ET模式服务器和客户端源码例子

关于epoll替代select作为高性能服务器的事件通知机制
  • tao_627
  • tao_627
  • 2014-08-25 21:09:31
  • 1928

unity开源框架ET 实战篇 之 框架demo介绍(一)

ET框架是什么我就不罗嗦了:请查看:https://github.com/egametang/Egametang 我自己介绍一下:https://gitee.com/beyonehu/manual_d...
  • beyonehu
  • beyonehu
  • 2017-11-15 11:46:28
  • 1018

mangos源码(游戏服务器端程序框架)

  • 2010年01月07日 17:33
  • 18.65MB
  • 下载

通过LandlordsCore 学习ET框架

ET框架学习笔记 请大家关注一下我的微博 @NormanLin_BadPixel坏像素 LandlordsCore LandlordsCore是ET交流群里的一位大佬用ET框架写的一个联机斗...
  • Norman_Lin
  • Norman_Lin
  • 2018-03-26 23:36:13
  • 101

ET框架---UnitComponent学习笔记

UnitComponent学习笔记 请大家关注我的微博:@NormanLin_BadPixel坏像素 跟管理Player的PlayerComponent很像,不过这里管理的是Unit。“装置”...
  • Norman_Lin
  • Norman_Lin
  • 2018-04-04 20:12:20
  • 17

ET框架---AppManagerComponent学习笔记

AppManagerComponent学习笔记 请大家关注我的微博:@NormanLin_BadPixel坏像素 private readonly Dictionary&amp;lt;in...
  • Norman_Lin
  • Norman_Lin
  • 2018-04-14 10:58:38
  • 3
收藏助手
不良信息举报
您举报文章:ET框架-服务端-NetOuterComponent学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)