精华内容
下载资源
问答
  • 游戏服务端

    2013-03-07 15:36:01
    游戏服务端
  • 游戏服务端+模拟游戏客户端游戏服务端+模拟游戏客户端
  • 天道游戏服务端

    2018-12-10 19:04:03
    天道游戏服务端
  • Golang游戏服务端

    2019-09-26 17:13:15
    使用责任链、反射、gin框架等技术实现的restful风格的Golang游戏服务端,里面包含了一系列功能。包括接收客户端的请求,并调用相关的业务代码。业务职责清晰,分层明显,是开发游戏服务端的不二选择。
  • 网络五子棋游戏服务端与客户端的实现,socket网络通信的实现,支持画图以及贴图的实现
  • 网络游戏服务端编程

    2018-05-10 16:33:31
    该资源主要讲述关于游戏服务端的编程,主要从网络模型,网络编程。游戏逻辑处理等过程
  • 网络游戏-游戏服务端虚拟时间实现方法.zip
  • 网络五子棋游戏服务端,C语言开发的,学习socke通信。
  • 网页版游戏服务端

    2012-11-10 21:03:40
    网页版棋牌游戏服务端
  • 服务端是使用C# .net core开发的分布式游戏服务端,其特点是开发效率高,性能强,双端共享逻辑代码,客户端服务端热更机制完善
  • web服务端和游戏服务端的区别

    千次阅读 2018-02-26 13:59:55
    最近几天在技术交流群里讨论到游戏服务端的一些技术细节,小说君发现有些做服务端的同学因为没有接触过游戏服务端,所以对游戏服务端产生了一些误解。因此今天的文章就从web服务端和游戏服务端的区别说起,简单介绍...
      最近几天在技术交流群里讨论到游戏服务端的一些技术细节,小说君发现有些做服务端的同学因为没有接触过游戏服务端,所以对游戏服务端产生了一些误解。因此今天的文章就从web服务端和游戏服务端的区别说起,简单介绍下游戏服务端。
    

      首先下个定义,我们讨论的「服务端」是什么?引用一下wiki对Server的定义:

      In computing, a server is a computer program or a device that provides functionality for other programs or devices, called "clients". This architecture is called the client–server model, and a single overall computation is distributed across multiple processes or devices.

      说得比较笼统,client-server模型,分布式提供服务等等,这点对于服务端程序员来说就是日常工作。

      然后是wiki对Server的分类:

      Typical servers are database servers, file servers, mail servers, print servers, web servers, game servers, and application servers.

      其他几种Server我们都比较清楚了,跟unix差不多同时诞生。另外三种,则是程序员日常开发所接触的Server类型,为了确定下文章接下来的讨论范围,我们不妨先给三种Server划定下范围。

      Web Server,典型例子是淘宝。

      特点:所有流程均由客户端发起,客户端发个请求,服务端返回个响应。而且,根据客户端访问的服务不同,客户端可以向不同的具体服务端节点发起请求。

      Game Server,典型例子是魔兽世界。

      特点:有一个肉眼能感觉到的连接握手的过程,建立连接后,流程有可能是服务端发起(比如给你展示周边玩家),也有可能是客户端发起(比如你移动了一下)。

      同时,如果你手边有抓包工具,可以看到,如果你选中了某个玩家,在该玩家的头像框消失之前,一直是同一个场景服务器在跟你通信。

      Application Server,典型例子是QQ。

      特点:介于Web Server和Game Server之间,看着像一个web服务器,但是又有游戏服务器的特点。

      接下来正文的对比部分,Web Server就特指第一类,Game Server就特指第二类,App Server不再拿来参与对比。

      对比之前,小说君先概述下服务端在client-server模型中的扮演角色。

      服务端,在物理上表现为一或多台主机,在逻辑上向客户端暴露一组host:port二元组,接受客户端连接,为每个客户端连接维持连接会话(Session)。客户端与服务端借助连接会话传递消息,消息按一定的协议序列化与反序列化,客户端与服务端的逻辑模块由消息的内容驱动运转。

      不论是Web Server,还是Game Server,在运作流程上都大体相同。而在流程中的细节上,有共同点,也有不同点。下面就分开说道说道。

      首先是共同点。

      共同点1:都是为客户端提供多种服务。

      比如淘宝既提供搜索服务,又提供商品页查询服务。

      魔兽世界既提供登录服务,又提供让你在场景里战斗、走跑跳的服务。

      共同点2:都需要连接会话的概念。

      会话是建立在连接之上的概念,其实本质上是服务端为某个特定客户端维持的数据结构与状态信息。

      游戏自不必说,玩家登录之后,服务端需要有一个专门的全局服务器维护玩家状态与玩家的部分较热的存档信息,玩家进入到某个场景,场景服务器还需要专门维护一份玩家的场景相关的状态信息。

      而对于Web Server,连接会话同样存在,最直观的理解是淘宝登录之后服务端会为客户端保持一个会话上下文。

      共同点3:服务端的每台物理机服务多个客户端。

      这是服务器的诞生基础,发展到现在,已经没人再讨论是异步IO还是多路复用,现在成熟的解决方案已经不存在孰优孰劣的问题,完全是哪个网络库用的顺手就默认接受这个网络库底层的IO模型。

      共同点4:都具有分布式结构。

      架构的演化总是相似的,Web服务端与游戏服务端在发展过程中相互学习相互演进,目前形成的主流架构基本都了解至少应该将专门管连接的、专门管逻辑、专门管存储的做一定程度的物理隔绝。

      可以像skynet一样,利用luaState做隔绝;可以像Erlang一样,利用actor做隔绝;也可以最简单的,按进程隔绝。只要能保证其中之一挂掉不会产生连锁反应导致其他都挂掉就可以了。

      共同点5:开发语言。

      实际上也是近几年手游开发火起来之后开发语言才趋于统一的。web开发一直是百家争鸣,而游戏开发在以前是C++一家独大。

      但是现在,客户端的逻辑层已经基本见不到C++的影子了,服务端纯用C++的也越来越少了。lua、python、java、C#、Erlang、js甚至ruby的工业级游戏服务端框架都有出现,web服务端和游戏服务端的开发语言已经趋同。

      然后是不同点。

      不同点1:会话的存在形式。

      这一点是web服务端与游戏服务端最本质的区别。

      web服务端的客户端与客户端之间交互非常有限,因此,服务端可以将会话保存在外部存储服务,比如一些缓存中间件、文件系统中间件,然后等再用到的时候再拿出来就可以了。

      而游戏服务端的客户端与客户端之间交互非常频繁,比如,同场景的其他玩家会不停做不规律移动,战斗时一个技能就会对复数个玩家造成影响。

      这时如果将会话状态保存在外部,会造成频繁的状态存取,严重影响服务器吞吐量。因此对于游戏服务端来说,会话通常保存在进程内。

      不同点2:交互频率与数据流向。

      web服务端的频率低,而且数据的流动是由客户端驱动的,流向通常是客户端请求了,服务端才返回。

      而游戏服务端的频率高,数据的流动一部分由客户端驱动,一部分由服务端驱动。流向除了服务端对客户端请求的响应,还有服务端的主动推送。

      不同点3:通信协议基础。

      通信协议基础就是客户端和服务端通信的协议所依赖的协议基础。

      按常识理解的话,web通信的基础在应用层是http协议。由于小说君对web开发并不太熟悉,所以不太清楚目前私有协议在web开发中的应用,但是想必即使是私有协议,也一定是套在http协议的某些字段里面的,这跟游戏的客户端服务端通信有本质区别。

      游戏通常会实现私有的序列化协议,可以简单理解为应用层定义协议包结构平铺成字节流或者是串行序列化字节流。如果要支持一定程度的协议版本兼容,会用二进制json或者protobuf来实现协议序列化,但是通信协议本身是没有「基础」可言的,纯私有化协议,不具普适性,也没有必要定义成一种专门的协议。

      不同点4:对第三方组件的依赖程度。

      web服务端发展速度快,从业者多,同技术栈的从业者交流更深入更频繁。因此,web服务端出现、并且还会出现越来越多的第三方独立组件。web服务端的从业者甚至只需要在自己的技术栈不同层次上选择不同的第三方组件,黏合起来,就能形成一整套的解决方案,非常方便。

      游戏服务端正相反,比较封闭,基本上每个项目组要么是从头到尾重写,要么是从其他项目组拿来整套技术栈直接改改。基本不存在第三方独立组件的情况,在技术开放氛围好些的公司还好,毕竟大家可以复用同一套框架,否则的话,公司内的框架多种多样,各种造轮子出来的,各种空降团队从原来公司带过来的,技术无法复用,团队成员流动更是一大难题。
    展开全文
  • WEB网页游戏服务端源码全集.pdf
  • 主要详细介绍了C++实现的分布式游戏服务端引擎KBEngine的概念以及使用方法,非常的实用,有需要的小伙伴可以参考下
  • 游戏服务端开发要点

    千次阅读 2017-02-15 02:50:03
    前言ps:一直希望有个游戏服务端的技能树,此文算是指明方向,故记录于此。 知道该去哪打怪、打什么怪,升级才快。 本文作为游戏服务器端开发的基本大纲,是游戏实践开发中的总结。第一部分专业基础,用于指导招聘和...

    前言

    ps:一直希望有个游戏服务端的技能树,此文算是指明方向,故记录于此。
       知道该去哪打怪、打什么怪,升级才快。
    

    本文作为游戏服务器端开发的基本大纲,是游戏实践开发中的总结。第一部分专业基础,用于指导招聘和实习考核, 第二部分游戏入门,讲述游戏服务器端开发的基本要点,第三部分服务端架构,介绍架构设计中的一些基本原则。
    希望能帮到大家。

    一、专业基础

    1.1 网络

    1.1.1 理解TCP/IP协议

    网络传输模型
    滑动窗口技术
    建立连接的三次握手与断开连接的四次握手
    连接建立与断开过程中的各种状态
    TCP/IP协议的传输效率

    思考:
    1)请解释DOS攻击与DRDOS攻击的基本原理
    2)一个100Byte数据包,精简到50Byte, 其传输效率提高了50%
    3)TIMEWAIT状态怎么解释?
    

    1.1.2 掌握常用的网络通信模型

    Select
    Epoll,边缘触发与平台出发点区别与应用
    Select与Epoll的区别及应用

    1.2 存储

    计算机系统存储体系
    程序运行时的内存结构
    计算机文件系统,页表结构
    内存池与对象池的实现原理,应用场景与区别
    关系数据库MySQL的使用
    共享内存

    1.3 程序

    对C/C++语言有较深的理解
    深刻理解接口,封装与多态,并且有实践经验
    深刻理解常用的数据结构:数组,链表,二叉树,哈希表
    熟悉常用的算法及相关复杂度:冒泡排序,快速排序

    二、游戏开发入门

    2.1防御式编程

    不要相信客户端数据,一定要检验。作为服务器端你无法确定你的客户端是谁,你也不能假定它是善意的,请做好自我保护。(这是判断一个服务器端程序员是否入门的基本标准)
    务必对于函数的传人参数和返回值进行合法性判断,内部子系统,功能模块之间不要太过信任,要求低耦合,高内聚
    插件式的模块设计,模块功能的健壮性应该是内建的,尽量减少模块间耦合

    2.2 设计模式

    道法自然。不要迷信,迷恋设计模式,更不要生搬硬套
    简化,简化,再简化,用最简单的办法解决问题
    借大宝一句话:设计本天成,妙手偶得之

    2.3 网络模型

    自造轮子: Select, Epoll, Epoll一定比Select高效吗?
    开源框架: Libevent, libev, ACE

    2.4 数据持久化

    自定义文件存储,如《梦幻西游》
    关系数据库: MySQL
    NO-SQL数据库: MongoDB
    选择存储系统要考虑到因素:稳定性,性能,可扩展性

    2.5 内存管理(重要!)

    使用内存池和对象池,禁止运行期间动态分配内存
    对于输入输出的指针参数,严格检查,宁滥勿缺
    写内存保护。使用带内存保护的函数(strncpy, memcpy, snprintf, vsnprintf等),严防数组下标越界
    防止读内存溢出,确保字符串以’\0’结束

    2.6 日志系统

    简单高效,大量日志操作不应该影响程序性能
    稳定,做到服务器崩溃是日志不丢失
    完备,玩家关键操作一定要记日志,理想的情况是通过日志能重建任何时刻的玩家数据
    开关,开发日志的要加级别开关控制

    2.7 通信协议

    采用PDL(Protocol Design Language), 如Protobuf,可以同时生成前后端代码,减少前后端协议联调成本, 扩展性好
    JSON,文本协议,简单,自解释,无联调成本,扩展性好,也很方便进行包过滤以及写日志
    自定义二进制协议,精简,有高效的传输性能,完全可控,几乎无扩展性

    2.8 全局唯一Key(GUID)

    为合服做准备
    方便追踪道具,装备流向
    每个角色,装备,道具都应对应有全局唯一Key

    2.9 多线程与同步

    消息队列进行同步化处理

    2.10 状态机

    强化角色的状态
    前置状态的检查校验

    2.11 数据包操作

    合并, 同一帧内的数据包进行合并,减少IO操作次数
    单副本, 用一个包尽量只保存一份,减少内存复制次数
    AOI同步中减少中间过程无用数据包

    2.12 状态监控

    随时监控服务器内部状态
    内存池,对象池使用情况
    帧处理时间
    网络IO
    包处理性能
    各种业务逻辑的处理次数

    2.13 包频率控制

    基于每个玩家每条协议的包频率控制,瘫痪变速齿轮

    2.14 开关控制

    每个模块都有开关,可以紧急关闭任何出问题的功能模块

    2.15 反外挂反作弊

    包频率控制可以消灭变速齿轮
    包id自增校验,可以消灭WPE
    包校验码可以消灭包拦截篡改
    图形识别码,可以踢掉99%非人的操作

    2.16 热更新

    核心配置逻辑的热更新,如防沉迷系统,包频率控制,开关控制等
    代码基本热更新,如Erlang,Lua等

    2.17 防刷

    关键系统资源(如元宝,精力值,道具,装备等)的产出记日志
    资源的产出和消耗尽量依赖两个或以上的独立条件的检测
    严格检查各项操作的前置条件
    校验参数合法性

    2.18 防崩溃

    系统底层与具体业务逻辑无关,可以用大量的机器人压力测试暴露各种bug,确保稳定
    业务逻辑建议使用脚本
    系统性的保证游戏不会崩溃

    2.19 性能优化

    IO操作异步化
    IO操作合并缓写 (事务性的提交db操作,包合并,文件日志缓写)
    Cache机制
    减少竞态条件 (避免频繁进出切换,尽量减少锁定使用,多线程不一定由于单线程) 多线程不一定比单线程快
    减少内存复制
    自己测试,用数据说话,别猜

    2.20 运营支持

    接口支持:实时查询,控制指令,数据监控,客服处理等
    实现考虑提供Http接口

    2.21 容灾与故障预案

    靠钱

    三、服务器端架构

    3.1 什么是好的架构?

    满足业务要求
    能迅速的实现策划需求,响应需求变更
    系统级的稳定性保障
    简化开发。将复杂性控制在架构底层,降低对开发人员的技术要求,逻辑开发不依赖于开发人员本身强大的技术实力,提高开发效率
    完善的运营支撑体系

    3.2 架构实践的思考

    简单,满足需求的架构就是好架构
    设计性能,抓住重要的20%, 没必要从程序代码里面去抠性能
    热更新是必须的
    人难免会犯错,尽可能的用一套机制去保障逻辑的健壮性
    游戏服务器的设计是一项颇有挑战性的工作,游戏服务器的发展也由以前的单服结构转变为多服机构,甚至出现了bigworld引擎的分布式解决方案,最近了解到Unreal的服务器解决方案atlas也是基于集群的方式。
    负载均衡是一个很复杂的课题,这里暂不谈bigworld和atlas的这类服务器的设计,更多的是基于功能和场景划分服务器结构。
    首先说一下思路,服务器划分基于以下原则:

    分离游戏中占用系统资源(cpu,内存,IO等)较多的功能,独立成服务器。
    在同一服务器架构下的不同游戏,应尽可能的复用某些服务器(进程级别的复用)。
    以多线程并发的编程方式适应多核处理器。
    宁可在服务器之间多复制数据,也要保持清晰的数据流向。
    主要按照场景划分进程,若需按功能划分,必须保持整个逻辑足够的简单,并满足以上1,2点。
    

    一些常用服务器的简要说明(游戏服务器拓扑结构没有绝对):

    Gateway

    Gateway 是应用网关,主要用于保持和client的连接,该服务器需要2种IO,对client采用高并发连接,低吞吐量的网络模型,如IOCP等,对服务器采用高吞吐量连接,如阻塞或异步IO。
    网关主要有以下用途:

    分担了网络IO资源
    同时,也分担了网络消息包的加解密,压缩解压等cpu密集的操作。
    隔离了client和内部服务器组,对client来说,它只需要知道网关的相关信息即可(ip和port)。
    client由于一直和网关保持常连接,所以切换场景服务器等操作对client来说是透明的。
    维护玩家登录状态。

    World Server

    World Server 是一个控制中心,它负责把各种计算资源分布到各个服务器,它具有以下职责:

    管理和维护多个Scene Server。
    管理和维护多个功能服务器,主要是同步数据到功能服务器。
    复杂转发其他服务器和Gateway之间的数据。
    实现其他需要跨场景的功能,如组队,聊天,帮派等。

    Phys Server

    Phys Server 主要用于玩家移动,碰撞等检测。
    所有玩家的移动类操作都在该服务器上做检查,所以该服务器本身具备所有地图的地形等相关信息。具体检查过程是这样的:

    首先,Worldserver收到一个移动信息,WorldServer收到后向Phys Server请求检查,Phys Server检查成功后再返回给world Server,然后world server传递给相应的Scene Server。

    Scene Server

    Scene Server 场景服务器,按场景划分,每个服务器负责的场景应该是可以配置的。理想情况下是可以动态调节的。

    ItemMgr Server

    ItemMgr Server 物品管理服务器,负责所有物品的生产过程。在该服务器上存储一个物品掉落数据库,服务器初始化的时候载入到内存。任何需要产生物品的服务器均与该服务器直接通信。

    AIServer

    AIServer 又一个功能服务器,负责管理所有NPC的AI。AI服务器通常有2个输入,一个是Scene Server发送过来的玩家相关操作信息,另一个时钟Timer驱动,在这个设计中,对其他服务器来说,AIServer就是一个拥有很多个NPC的客户端。AIserver需要同步所有与AI相关的数据,包括很多玩家数据。由于AIServer的Timer驱动特性,可在很大程度上使用TBB程序库来发挥多核的性能。

    End

    把网络游戏服务器分拆成多个进程,分开部署。这种设计的好处是模块自然分离,可以单独设计。分担负荷,可以提高整个系统的承载能力。
    缺点在于,网络环境并不那么可靠。跨进程通讯有一定的不可预知性。服务器间通讯往往难以架设调试环境,并很容易把事情搅成一团糨糊。而且正确高效的管理多连接,对程序员来说也是一项挑战。

    展开全文
  • 基于netty开发的网页游戏服务端,和flash进行socket通信(使用json),是我近期的作品 为了找工作。 我上传了服务端的代码(在这之前我删掉了绝大部分的业务逻辑层的代码) 所以你会在业务层的代码中看到比较诡异的代码...
  • 自己写的五子棋游戏服务端软件,供大家参考学习
  • golang开发的h5小游戏服务端domo
  • 冒险岛 096 游戏服务端 Java源码 适合深入了解Java的朋友,希望能够帮到大家对Java的研究
  • 内容索引:VC/C++源码,网络相关,五子棋,服务端 VC++ 网络五子棋游戏服务端与客户端的实现,本程序的重点不是在游戏编写方面,而是更侧重于游戏服务器与客户端的组织配合方面,互相传递变量,形成一个有机的游戏整体...
  • 贝密游戏服务端管理系统安装手册,服务端框架:Spring Boot + MySQL + JPA + TIO
  • KBEngine是一款开源mmog服务端引擎, 使用统一协议能够轻松与前端对接,能轻松使用unity3d、 ogre、 cocos2d、 html5等作为前端表现。底层框架由c 编写, 逻辑层使用python(支持热更新), ... 标签:游戏服务端引擎
  • 一款开源的MMOG游戏服务端引擎,仅Python脚本即可简单高效的完成任何游戏逻辑(支持热更新),
  • fast - 基于skynet的游戏服务端框架

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,731
精华内容 19,892
关键字:

游戏服务端