一.写在前面

通过前面的几篇,我们已经大概了解了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框架对数据库进行操作以响应客户端的请求.

转载于:https://www.cnblogs.com/WongSiuming/p/4981340.html

[小明带你玩儿Photon]5.服务器与客户端架构相关推荐

  1. photon 服务器操作系统,[专栏作家] Photon Server之Photon Control服务器控制界面

    原标题:[专栏作家] Photon Server之Photon Control服务器控制界面 Photon Control是您Photon服务器的控制用户界面. 启动PhotonControl.exe ...

  2. php微信小程序物流进度推送,微信小程序 消息推送php服务器验证实例详解

    微信小程序 消息推送php服务器验证实例详解 设置页面("设置">>"开发设置"): 1.设置服务器域名 注意http和https协议的不同. 2. ...

  3. 小森生活显示无可用服务器,《小森生活》无可用游戏服务器解决教程 无可用网关服务器怎么办...

    导 读 小森生活无可用网关服务器是什么意思?怎么解决?小森生活无可用网关服务器这个提示在进入游戏中会出现哦,很多玩家都无法正常进入游戏怎么解决呢,现在就来告诉给大家详细解决方法吧~ 小森生活无可用游戏 ...

  4. 小程序登录本地服务器,微信小程序实现用户登录模块服务器搭建

    我选用的是node.js来搭建服务器,没有安装的小伙伴可以参考我的node.js其他博客. 服务器安装与配置 初始化项目,将会自动创建package.json配置文件. npm init -y 安装E ...

  5. photon 服务器操作系统,photon 云服务器

    photon 云服务器 内容精选 换一换 根据指定的云服务器ID列表,删除云服务器.系统支持删除单台云服务器和批量删除多台云服务器操作,批量删除云服务器时,一次最多可以删除1000台.您可以在API ...

  6. 微信小程序控制台 报错 对应的服务器证书无效 控制台输入 showRequestInfo() 可以获取更详细信息 原因是ssl证书过期 重新申请即可

    微信小程序控制台 报错 对应的服务器证书无效.控制台输入 showRequestInfo() 可以获取更详细信息 报错原因:域名下的SSL证书过期 我这边报错的原因是ssl证书过期 重新申请后就好了, ...

  7. [Web] [微信小程序-云开发] 商城 无服务器 加后台管理

    [Web] [微信小程序-云开发] 商城 无服务器 加后台管理 说明: 目前云开发仅针对认证后的公众号使用(每年300的费用那个) wxapp-mall-clouddb 前言 如何使用 更多说明 功能 ...

  8. 微信小程录制视频上传服务器,微信小程序-从相册获取图片,视频使用相机拍照,录像上传+服务器nodejs版接收-微信小程序视频上传功能-微信小程序视频上传...

    在本文微信小程序-从相册获取图片使用相机拍照本地图片上传之前需要看看微信小程序-获取用户session_key,openid,unionid-后端为nodejs代码封装是在上文添加的.本文知识点:1. ...

  9. 微信小程序开发(六)——服务器

    目录 建立一个简单的本地服务器 现在可以使用VS Code,如果没有就在终端中操作 微信小程序调用网易云API 服务器百度网盘提取地址: 建立一个简单的本地服务器 新建一个文件夹fuwu 然后在该页面 ...

最新文章

  1. java 冒泡排序和快速排序 实现
  2. 2021年Java面试题目最新总结【90%面试会踩的坑】
  3. python3网络编程
  4. 我的 Serverless 实战 — Serverless 架构理念 ( 后端服务器发展 | Serverless 与 ServerFul | Serverless 定义 | 架构优缺点 )
  5. leetcode 678. Valid Parenthesis String | 678. 有效的括号字符串(带缓存的暴力递归)
  6. 【资源分享】CS起源 V34.4044(经典版本)
  7. linux系统数据落盘之细节
  8. 产品经理专业知识50篇(五)-用户成长体系设计方案
  9. 突破开源Redis的内存限制,存算分离的GaussDB到底有多能“装”?
  10. android wifi ap sta,WIFI的AP/Sta模式简单介绍
  11. 华为公开“一种芯片堆叠封装及终端设备”专利
  12. 分享bootstrap3.0.2响应式模板-第三弹[Metronic_Admin]
  13. 前端框架Vue(3)——vue-cli 目录结构
  14. 简单的方法完成项目上传到github
  15. LOST1-Linux远程控制工具
  16. 使用Java模拟登录KINGOSOFT青果教务系统(湖北三峡职业技术学院)
  17. 摄像头录像存储计算方式
  18. mysql特殊字符转义_MYSQL特殊字符转义
  19. AI三驾马车之深度学习框架
  20. beatsaber自定义

热门文章

  1. IDEA将maven项目复制成一个新的框架/项目
  2. 从linux使用sz命令下载大于4g的文件到windows
  3. python中filter用法_filter用法--Python
  4. python文件创建人_Python文件处理:创建、打开、追加、读、写
  5. python 调用 .netcore api_浅谈Python调用XBee的API来进行通讯
  6. 用python写聊天机器人_用Python 写一个机器人陪你聊天(文尾有彩蛋)
  7. Leetcode074. 合并区间
  8. opencv编译找不到nvcuvid.h文件
  9. [CodeForces - 276A] Lunch Rush
  10. 勒索软件Locky最新传播载体分析——中文版Office危在旦夕