游戏服务器是游戏客户端用来玩多人游戏的本地或远程服务器。大多数通过 Internet 玩的游戏都是通过连接到游戏服务器来运行的。
什么是游戏客户端?
游戏客户端是连接到游戏服务器的软件程序。服务器提供连接并向客户端发送信息包。许多客户端可以同时连接到服务器,并将保持对游戏世界的概览。每个客户都有自己独特的视频游戏世界视角。
大多数客户是游戏客户端-服务器架构和点对点的混合体。
视频游戏是为娱乐而创建的计算机程序,基于一个或多个人与执行视频游戏的电子设备之间的交互,该电子设备可以是计算机、街机系统、游戏机、手持设备或移动设备电话。
在许多情况下,视频游戏会重现虚拟环境和情境,玩家可以在其中控制一个或多个角色(或该环境的任何其他元素),以通过某些规则实现一个或多个目标。
通过电视、PC 显示器或投影仪等视频输出设备观看游戏进行互动,其中节目记录在磁带、光盘、磁盘、存储卡、特殊游戏或在线上。
玩家通过键盘和鼠标、游戏手柄、操纵杆甚至运动感应设备等外部设备与游戏互动。游戏在一个人与机器或 CPU 之间进行,在同一控制台上的两个或多个人之间进行,通过 LAN 或通过 Internet 在线进行,可以与机器竞争,与计算机竞争或相互竞争。
游戏分为几类,最具代表性的有:动作类、角色类、策略类、模拟类(种类繁多)、运动类和冒险类。通过最新的游戏引擎技术和 GPU,采用具有 EAX 效果和现代视觉效果的新型杜比数字环绕声。
专门销售视频游戏的机构是全球休闲行业的经典之作。90 年代初推出的 16 位系统显着提高了视频游戏的普及率。随后使用 CD-ROM,因为它的容量比磁带更大,因为它们已经达到了技术极限,然后批量生产更便宜。目前系统使用大容量DVD,由于价格高、蓝光、容量大,使用频率不高。目前,使用高清电视和电信线路传输此类视频游戏有助于进一步提高其游戏水平和逼真度。
游戏服务器托管
游戏服务器提供商是租用游戏服务器的公司。游戏部落通常会为您玩的游戏租用一台或多台服务器,成员会帮助支付租金。游戏服务器提供商经常提供工具来控制和配置Web 服务器
专用游戏服务器
大多数游戏都使用专用的服务器应用程序。该程序跟踪玩家并将其分发给其他玩家。这比点对点更高效,但需要一台单独的计算机来托管服务器应用程序。这台额外的计算机是服务器。
网络带宽,带宽的上升往往是托管游戏服务器时的主要限制因素。具有家庭带宽的 Internet 连接很少能提供承载超过 4 到 10 个客户端的专用游戏服务器所需的上行带宽。
游戏服务器类型
游戏服务器可分为监听服务器和专用服务器。在服务器上监听,服务器与游戏客户端在相同的过程中运行,允许玩家同时托管和参与游戏。但是当关闭客户端时,服务器也会这样做。
Listen 服务器主要由个人操作,最常见的是 LAN 方而不是 Internet,并且由于在一台机器上运行的服务器和客户端需要大量的处理要求和带宽,因此通常只有少数玩家。
专用服务器是独立于客户端运行的服务器。这些服务器可以由个人操作,但通常在位于数据处理中心的专用计算机上操作,这些计算机可以提供更高的带宽和专用的处理能力。
专用服务器是大多数 PC 多人游戏托管游戏服务器的首选方法。
大型多人在线游戏通常由拥有游戏的软件公司运营的专用服务器上运行,允许他们控制和更新内容。在许多情况下,它在集群中工作以允许巨大的环境和大量的玩家。
联网游戏:同时玩的范围比较小,比如8-10个人。
网络游戏:在远端有许多机器跑一个很大的系统,可以有几千几万几十万甚至更多的玩家连进来一起玩。
常见的其他互联网服务有:搜索、电商、即时通讯、邮件、视频等
网络连接和数据收发:TCP收包打包分包。
数据存取
逻辑计算
状态保持:上下文、内部驱动等等。
常见种类:机架式服务器,刀片机,小型机。
会根据游戏类型或运行程序的不同,在CPU/内存/硬盘上有所侧重。
从游戏交互形态,看游戏开发分工
游戏后台开发==游戏服务器开发
承载游戏服务的硬件;
提供游戏服务的软件;
开发游戏服务的程序员。
二、游戏服务的特点及应对
满足海量游戏用户的稳定和高质量的服务需求
海量 - 十万~百万~千万级同时在线,最高达亿级注册量;
稳定 - 相对于:宕机,网络和计算卡顿;
高质量 - 快速:网络延迟;逻辑严谨;更新频率和及时性。
延迟敏感
实时交互游戏一般需要网络延迟在300ms以内才能保证体验。
实时的高强度交互
单个终端高频发送请求;
单次请求引发多处数据改变;
业务逻辑复杂,内部耦合度高
[延迟敏感+高强度交互]同时作用下,[状态维护]往往成为必需;
复杂游戏服务的实现代码,可达百万行量级。
变更频度高,幅度大、变更幅度,包含内容和逻辑。
(1)对操作系统基础知识的了解
处理器管理
进程管理
线程调度
内存管理
IO管理
权限管理 ...etc
(2)对Linux操作系统的了解
· 内核
· 用户管理
· 文件系统
· 进程、线程
· 进程间通信
· 网络
· 信号处理
· 权限等
· 对编译器gcc的了解
· 对调试器gdb的了解
· 对文档工具ar的了解
· 对autotools的了解
· 对Makefile的了解
· 对性能分析工具的了解
· 对内存泄露调试工具的了解
· 对samba文件共享的了解
· 对版本管理工具(cvs/svn/cc)的了解
(1)选择编程语言的几个因素
· 业务复杂度
· 执行效率VS开发效率
· 开发人员和团队能力
(2)C/C++技能要求
· 对C/C++的语法非常了解
· 对Ansi C库函数非常了解
· 对指针有正确而且牢固的认识
· 对STL库非常了解
· 对C/C++语言的内存分配机制非常了解
· 对第三方框架的了解(如ACE/ICE等)
(1)Shell脚本
· Linux下的程序开发,学会使用shell脚本会大大的提高工作效率;
· 一些工作适合用shell来完成,开发效率更快;
· shell脚本常常被用来做一些集成的工作。
(2)程序内嵌脚本语言
· 了解脚本(解释性语言)的优缺点;
· 脚本在游戏开发中的适用范围;
· Lua/Python/自定义脚本。
(1)化繁为简的重要途径:区分“变化性”是其中的关键。
(2)设计原则 - SOLID
· 单一责任原则
· 开发-封闭原则
· 里氏替换原则
· 依赖倒置原则
· 接口分离原则
(3)设计模式:可以视为设计原则的应用。
· 系统管理工具:ipcs/ps/top/...
· 文件系统工具:ls/find/where/which/locate...
· 文件处理工具:sed/grep/...
· 性能检测工具:iostat/memstat...
· SSH工具:ssh/ssh2/sshd/ssh2d/scp/...
(1)关系数据库
· 对数据库原理的了解
· 常见DBMS:mysql:了解mysql的安装和简单管理;性能调优的房;赋值;备份和恢复。
· 对SQL语言的了解及使用
· 对数据库表结构设计的了解
(2)NoSQL
· KV型的数据存储方式
· CAP & BASE
· Redis/MongoDB
(3)文件
(4)网络接入,协议
· 了解TCP/UDP协议
· 了解HTTP协议
· 底层网络编程接口:BSD SOCKET
· 网络多路处理机制:signal/select/poll/epoll/...
· C10K ~ C1000K
· Google Protobuf