游戏服务器概述:

游戏服务器装载着游戏对外服务,对于房间类游戏其功能包括房间的创建、进入房间、离开房间、开始游戏、结束游戏。由于不同游戏对应的逻辑不通,如果需要代码共用,则可将房间的操作分离出来做成一个共用库。只有游戏开始后和游戏结束之间的逻辑不同,因此可以像回调函数一样,当传入的信息游戏框架无法识别则可调用我们设置的回调函数。或者同时需要框架处理和游戏逻辑处理。这样就很好的分离两者,降低编码复杂度。

游戏服务器结构:

                                

游戏服务器细节

例如用户进入房间时框架先逻辑处理再调用游戏逻辑提供的接口再次进行处理,代码如下:

// OnUserEnter 用户进入房间
func (g *GameLogicBase) OnUserEnter(user *User) {fmt.Println("OnUserEnter 用户进入房间")if g.Room.GetSignId() != user.GetUserRoomSignId() {fmt.Printf("GameLogicBase: OnUserEnter g.Room.getRoomID()=%v user.GetUserRoomId()=%v\n", g.Room.GetSignId(), user.GetUserRoomSignId())return}UserSeatId := user.GetUserSeatId()// 通知用户房间内的其他人  通知其他用户有玩家进入for seatid, seatuser := range g.Room.GetSeatUsers() {if seatid != UserSeatId {SendOtherUserEnterRoom(user, seatuser)SendOtherUserEnterRoom(seatuser, user)}}// 调用子逻辑g.Interface.OnUserEnter(user)
}

当框架无法识别此信息则可以调用游戏逻辑接口,代码如下:

// OnMessage 处理信息
func (g *GameLogicBase) OnMessage(user *User, message *grpc_common.Message) {//fmt.Println("OnMessage 处理信息")if message == nil {fmt.Printf("GameLogicBase: OnMessage message is nil\n")return}g.Interface.OnMessage(user, message)
}

如果是实时性较强的游戏,则需要仔细考虑锁的使用,否则延迟较大。

房间类游戏后台框架(四)—游戏服务器相关推荐

  1. 房间类游戏后台框架(三)—大厅服务器

      大厅服务器概述 大厅服务器负责玩家进入游戏的接入.发送公告等功能.当玩家登陆完毕.游戏结束后将会进入大厅服务器.   大厅服务器需求 公告 对玩家进行匹配 创建房间 加入房间 大厅服务器结构 大厅 ...

  2. 房间类游戏后台框架(一)—介绍

    闲来无事用GO语言写了个简易的房间类游戏后台框架,目前实现基本房间功能,并放了贪吃蛇游戏进去,可实现多人在线贪吃蛇.由于没有前端,导致项目难以继续下去.整个项目大概完成75%,基本目标也都实现,看以后 ...

  3. html5游戏开发-零基础开发RPG游戏-开源讲座(四)-游戏脚本化地图跳转

    首先,本篇文章是零基础开发RPG游戏-开源讲座系列文章的第四篇,来实现游戏的脚本化,和利用游戏脚本实现地图场景的切换,离上次更新貌似很长时间了,你在看下面的文字之前,需要先了解前三篇在下啰嗦了些什么东 ...

  4. 经典游戏底层框架--迷宫游戏构成原理剖析

          今晚课题 点击[阅读原文]或长按图片[识别图中的二维码]即可参加今晚的课程.

  5. Silverlight游戏设计(Game Design):(四)从零开始搭建游戏主体框架

    思路已俨然清晰,接下来要做的是从零开始搭建游戏的主体框架.Silverlight作为RIA界的新宠儿,不仅在游戏开发方面性能优越,在企业开发领域的优异表现同样日益显著.像我们这些长期从事.NET开发的 ...

  6. java 分布式游戏服务器框架,集群游戏服务器框架,游戏服务器网关框架 ioGame 网络游戏服务器框架

    网络游戏框架简介 ioGame 是一个由 java 语言编写的网络游戏服务器框架.支持 websocket.tcp ,适用于全球同服.回合制游戏.策略游戏.即时战斗等游戏服务器的开发.具有高性能.稳定 ...

  7. 游戏UI框架设计(四) : 模态窗体管理

    我们在开发UI窗体时,对于"弹出窗体"往往因为需要玩家优先处理弹出小窗体,则要求玩家不能(无法)点击"父窗体",这种窗体就是典型的"模态窗体" ...

  8. 《仙剑奇侠传online》游戏后台优化分析:CPU、内存与启动时间

    一.服务器CPU性能优化 1.1寻路算法JPS优化 MMORPG游戏中服务器中需要对NPC寻路,然而A*算法及其各种优化并不让人满意,因此寻路算法也成为瓶颈之一. 因此,本文介绍JPS的效率.多线程. ...

  9. 游戏后台杂谈:后台的语言、系统与构架

    前言 撸主踩坑游戏后台N年,受摧残无数,在饱受蹂躏的过程中,因为工作关系,有幸见识过不少项目的架构和实现方式:也因为熟识的兄弟各奔西东自立山头,领教了一些小公司的后台生存之道.些许感悟,抛砖引玉,望高 ...

最新文章

  1. IQKeyboardManager使用方法
  2. 神经网络最容易忽略的问题影响了网络的性能(图像识别)
  3. Spring Cloud Config Server迁移节点或容器化带来的问题
  4. css的padding
  5. 使用docker快速启动jetlinks
  6. DBGridEh使用指南
  7. 3d激光雷达开发(从halcon看点云pcl库)
  8. 开发环境配置--Ubuntu+Qt4+OpenCV(二)
  9. iphone开发OC语言的NSString与int和float的相互转换
  10. QToolButton按钮
  11. EasyPoi 模板导出Excel (带图片) 以及一些踩坑记录
  12. 倾斜模型精细化处理_基于倾斜摄影三维建模的模型精细化修复方法研究
  13. 百度地图API学习 - 点击地图显示为中心点
  14. 均值不等式中考_中考数学解题技巧方法
  15. 《目标检测蓝皮书》第4篇 经典热门网络结构
  16. 《中国合伙人》经典台词:一个人迫于无奈之下的选择,往往是正确的。。。
  17. AE制作文字模糊特效
  18. 【总结】4S汽车维修管理系统ssm框架vuejs项目
  19. java中的线程池有哪些,分别有什么作用?
  20. 名企笔试:网易游戏2017招聘笔试题(赶去公司)

热门文章

  1. 每次阅读外文技术资料都头疼,终于知道原因了。
  2. 大数据热的冷思考:无法取代传统的新闻传播科研方法
  3. Linux如何ping本机IP,Linux ping6 本地ipv6地址无效的参数
  4. Rasa课程、Rasa培训、Rasa面试、Rasa实战系列之Sparsity
  5. 网络的形成-从原始部落到现代化世界
  6. EVE-NG模拟器教程(三)——Lab平台初探
  7. 参加《全流程全要素的研发项目管理》培训记录与心得
  8. 敏感性、特异性、假阳性、假阴性(sensitivity and specificity)
  9. ModuleNotFoundError: No module named ‘kombu.five‘
  10. 换手机 之导入通信录