zoukankan      html  css  js  c++  java
  • [小明带你玩儿Photon]5.服务器与客户端架构

    一.写在前面

    通过前面的几篇,我们已经大概了解了Photon客户端与服务端的通信并对日志进行了介绍.结合和本系列一起更新的FluentNHibernate初探系列即可以进行一般性的游戏开发了.

    二.客户端和服务端的通用部分

    我们建立一个类库项目,将服务端和客户端需要进行通讯的数据类型存储在这里,包括操作代码(OperationCode),参数的增加和提取(ParameterTool.GetParameter<T>和ParameterTool.AddParameter),以及参数的代码(ParameterCode)等.此外,数据库中的数据类型(DBModel)也放在这里.

    其结构如下图:

    Model中是和数据库中表对应的类,除开一个工具类之外,其它的都是枚举类型.暂时所用到的结构就是这样.

    三.客户端架构

    客户端的服务器部分通过不同的控制器对外提供调用,完成和服务器的通信.

    类间关系如图:


    图中的类里,PhotonEngine是继承了MonoBehavior类和IPhotonPeerListener接口的单例类,会在Awake函数中连接服务器,在Update函数中调用PhotonPeer的Service函数来向服务器发送Request,并接受服务器的Response.值得注意的是在场景加载时要确保不会被销毁以防止连接断开.

    ControllerBase是抽象类,继承自MonoBehavior.在Start函数执行时将在PhotonEngine中注册.当PhotonEngine得到Response之后,会根据OperationCode调用已注册的相应的Controller.在Destroy函数中,会取消在PhotonEngine的注册记录以防止出现找不到引用的bug.各个不同的Controller就会对不同的操作进行处理.

    四.服务端架构

    服务端有一个继承了ApplicationBase的ArpgApplication类,还有一个继承了PeerBase的ClientPeer.服务端接收到了连接的请求后会创建ClientPeer,接受Request和发送Response的函数都在ClientPeer中.

    主要结构如下图:

    此结构中所有的Handler与服务端的Controller对应,一个Controller对应一个Handler,他们之间处理相应的Request和Response.在服务端调用的时候,先是ClientPeer接收到Request,然后根据OperationCode,判断该调用哪个Handler,在ArpgApplication中找到对应的Handler,然后把Request发给它让它进行处理,返回处理的结果Response,发送给客户端.

    在Handler处理的过程中,一般都会需要对数据库进行操作,所有的操作都封装在DB.Manager中,对相应的数据库操作调用相应的的Manager中的方法即可.

     五.结语

    以上涉及到了三个项目的开发,其中用来类库项目Common是用来约定服务端与客户端的传递参数结构用的,类似一个协议.客户端对外提供各种方法以方便其它模块调用.服务端借助FluentNHibernate框架对数据库进行操作以响应客户端的请求.

  • 相关阅读:
    vivado 连接不上板子 There is no current hw_target
    excel 方框打钩
    2019新个税如何计算
    printf("loops %u / %u%c[K ", loops + 1, opts->loops, 27); printf("%cM", 27);
    HttpUtil
    Spring注入bean和aop的注意事项
    获取所有bean的名字
    不可见类有抽象父类,spring配置子类bean,注入父类,aop就可以切父类的方法
    实例/静态工厂方法得到bean
    注入抽象类的子类
  • 原文地址:https://www.cnblogs.com/WongSiuming/p/4981340.html
Copyright © 2011-2022 走看看