游戏Demo服务器开发总结

游戏背景:房间类多人联机对战游戏

服务器功能:非对战模块通信+战斗通信

开发环境:golang+protobuf+logrus+mongodb

项目地址:https://github.com/iwangyao/DemoServer

要点总结

一.服务端开启

1.使用go关键字每新连接一个客户端就开启一个goroutine

2.每个与客户端连接的协程里,循环读客户端消息,获取的消息使用一个消息处理中心处理

3.写一个简单的客户端进行连接测试

二.通信协议模型

1.协议分为三层:第一层消息类型,第二层消息命令,第三层消息体

2.协议编解码:编码,消息类型int32,消息命令int32,消息体protobuf编码,在最前面加上协议内容的长度编码;解码,根据消息命令和类型确定消息体的protobuf类型,使用相应解码方法。

3.测试,客户端将需要测试的消息编码,发送给服务端,服务端解码

三.模块划分

1.登陆:客户端每次新开启发送uuid(设备id),服务器根据uuid检查数据库是否有相应用户id,有则返回用户Id,没有则新建一条表项,将新建的用户id返回给客户端

2.匹配:使用一个匹配房间管理匹配信息,客户端发送请求匹配消息,服务端将客户端信息加入匹配房间,每个请求都是在一个单独的Goroutine里,为了避免过量玩家多人同时进入一个匹配房间,将玩家加入匹配房间时,加锁控制,完成后再解锁。

3.战斗:战斗采用帧同步,每个玩家将操作信息发来,收集齐玩家信息后,再进行广播,为了避免一个玩家卡导致整个战斗玩家都要等待的情况,设置超时就直接广播。

原文地址:https://www.cnblogs.com/ayaoyao/p/11478872.html

时间: 2024-10-28 06:43:02

游戏Demo服务器开发总结的相关文章

游戏服务器开发需要学习的技术

一,游戏服务器编程语言的选择 所谓的游戏服务器编程语言其实有很多,基本上任何一种语言都可以作为游戏服务器的编程语言.这需要根据自己游戏的类型和要求加以选择.比如C++,Java ,Erlang,go等等.目前我用过的只有C++和Java.但是以Java为主.所以接下来就以自己的经验,谈谈以Java为核心的游戏服务器开发技术体系. Java目前作为游戏服务器开发语言已经很是普遍.但是大多数是作为页游或手游的服务器,而端游戏一般选择C++,因为端游对服务器的性能要求相对比较高一些.两种语言各有利弊.

erlang 游戏服务器开发

http://blog.csdn.net/slmeng2002/article/details/5532771 最近关注erlang游戏服务器开发  erlang大牛写的游戏服务器值得参考 介绍本文以我的OpenPoker项目为例子,讲述了一个构建超强伸缩性的在线多游戏玩家系统.OpenPoker是一个超强多玩家纸牌服务器,具有容错.负载均衡和无限伸缩性等特性.源代码位于我的个人站点上,大概10,000行代码,其中1/3是测试代码. 在OpenPoker最终版本敲定之前我做了大量调研,我尝试了D

游戏服务器开发技术选型

开发语言的选择 业界主要的是c/c++ + Python/lua模式做游戏服务器.c/c++做网络通讯数据传输,python/lua做业务逻辑.这样既保持了网络传输的效率(c++),又提升开发效率(Python/lua),同时也支持热更新. 当然,也有其他服务器开发语言,erlang(页游公司用的多),node.js(少量游戏用的,还有一个node.js写的引擎叫pemolo) 开源服务器引擎 1.firefly(9秒社团开发的一款python游戏服务器框架) 2.kbengine(作者说他按b

NIO原理剖析与Netty初步----浅谈高性能服务器开发(一)

除特别注明外,本站所有文章均为原创,转载请注明地址 在博主不长的工作经历中,NIO用的并不多,由于使用原生的Java NIO编程的复杂性,大多数时候我们会选择Netty,mina等开源框架,但理解NIO的原理就不重要了吗?恰恰相反,理解NIO底层机制是理解这一切的基础,由此我总结一下当初学习NIO时的笔记,以便后续复习. 以下是我理解的Java原生NIO开发大致流程: 上图大致描述的是服务端的NIO操作. 第一步,绑定一个服务的端口 这与传统阻塞IO中的ServerSocket类似,没什么好说的

手游服务器开发技术详解

从事游戏服务器开发差不多两年时间,两年间参与了不少项目,学到了很多游戏服务器开发技术,参与过几个不同架构的服务器开发,就随便聊聊游戏服务器开发需要的技术.(以下所指游戏服务器更偏向于手游,因为我对端游和页游开发接触并不多) 一.聊聊服务器开发有哪些东西要考虑. 1.开发语言的选择: 工欲善其事,必先利其器,选择一门适合的开发语法对后期开发有着事半功倍的作用. 业界主要的是c/c++ + Python/lua模式做游戏服务器.c/c++做网络通讯数据传输,python/lua做业务逻辑.这样既保持

干货推荐:如何运维千台以上游戏云服务器——游族网络

干货推荐:如何运维千台以上游戏云服务器——游族网络 来自上海游族网络的运维总监李志勇,在3月4日云栖社区中带来的分享“如何运维千台以上游戏云服务器”.本次分享重点是云时代的运维,包括游戏上云部署整体方案.游戏服务器批量运维管理,并对企业选择RDS还是自建MySQL数据库给出了自己建议. 关于分享者: 李志勇,2010年加入游族网络,目前担任游族网络运维总监,全面负责游族网络运维业务.他具有十年运维工作经验,八年游戏行业从业经验,专注于游戏虚拟化技术和网络优化. 分享正文: 游戏产品架构进化史  

基于Netty和Raphael的塔防online游戏Demo(一)

这是一个出于兴趣而在业余时间写的项目,初版的目的在于了解游戏服务端的一些设计思路,所以基本是想到什么写下什么,并没有做过于细节的设计,和过早的优化. 在这个版本里面,主要要完成以下功能: 定制简单的通信协议 处理简单的游戏逻辑 可运行的Server和Client 一. 服务端设计 整个服务端暂且分成以下几个部分: 基础通信模块 逻辑处理模块 GM模块 服务器状态监控模块 对服务端的几个高级抽象: 1)Context Context代表了整个服务端的生命周期, 负责启动和停止所有的游戏 2)Gam

unity + win8.1 apps 小游戏demo

unity3d用的人挺多...本来想写个3d游戏试试..额..貌似挺麻烦.. .....先用unity写个简单的2d游戏吧.. (adsw回车  或者  触摸屏虚拟摇杆) 开发环境 unity4.5.1f3      vs2013 express       win8.1 实现方法如下 1.创建自己的坦克Sprite 2.创建敌方坦克Prefab 3.创建子弹Prefab 4.添加虚拟摇杆 5.碰撞检测 具体实现 1.控制自己坦克的代码 if (Input.GetKey (KeyCode.W))

MMORGP大型游戏设计与开发(客户端架构 part9 of vegine)

时间在人们的生活中是多么重要的东西,如果打乱了时间,不知道这个时间会成什么样子.在客户端中,自然也有时间模块,因为不同的时间可能会处理不同的事情,特别是在追求高度自由化的同时,时间也成为了一个很重要的核心.没有时间,游戏世界将失去平衡,没有时间的游戏,会让人觉得乏味而单调.好了,我不用再强调时间多重要,想必大家已经明白了.比如游戏中的时辰变化,天气变化,这个是有时间的吗,答案是肯定的.在此次设计中,时间的接口中又提供了哪些方法呢? CODE 模块time 文件system.h /** * PAP