zoukankan      html  css  js  c++  java
  • 游戏服务器概述

    声明:本文内容源自腾讯游戏学院程序公开课。

    一、什么是游戏服务器

    1,从游戏玩家之间的交互形态出发

    • 单机游戏:一个人在机器上玩。
    • 联网游戏:同时玩的范围比较小,比如8-10个人。
    • 网络游戏:在远端有许多机器跑一个很大的系统,可以有几千几万几十万甚至更多的玩家连进来一起玩。

    2,游戏服务是互联网服务的一种

    • 常见的其他互联网服务有:搜索(百度)、电商(阿里)、即时通讯(腾讯)、邮件、视频等

    3,游戏服务的基本职能有哪些?

    • 网络连接和数据收发:TCP收包打包分包。
    • 数据存取
    • 逻辑计算
    • 状态保持:上下文、内部驱动等等。

    4,游戏服务器:严格说是一个硬件概念

    • 常见种类:机架式服务器,刀片机,小型机。
    • 会根据游戏类型或运行程序的不同,在CPU/内存/硬盘上有所侧重。

    5,游戏服务器开发

    • 从游戏交互形态,看游戏开发分工

    游戏后台开发==游戏服务器开发

    6,“游戏服务器”到底指什么?

    • 承载游戏服务的硬件
    • 提供游戏服务的软件
    • 开发游戏服务的程序员

    二、游戏服务的特点及应对

    1,游戏服务要解决的核心问题

    满足海量游戏用户的稳定和高质量的服务需求

    • 海量 - 十万~百万~千万级同时在线,最高达亿级注册量;
    • 稳定 - 相对于:宕机,网络和计算卡顿;
    • 高质量 - 快速:网络延迟;逻辑严谨;更新频率和及时性。

    2,游戏服务与其他互联网服务的区别?

    延迟敏感

    • 实时交互游戏一般需要网络延迟在300ms以内才能保证体验。

    实时的高强度交互

    • 单个终端高频发送请求;
    • 单次请求引发多处数据改变;

    业务逻辑复杂,内部耦合度高

    • [延迟敏感+高强度交互]同时作用下,[状态维护]往往成为必需;
    • 复杂游戏服务的实现代码,可达百万行量级。

    变更频度高,幅度大

    • 变更幅度,包含内容和逻辑。

    3,前后台程序的区别

    • 独占,意味着什么?
    1. 拥有所有资源的控制权;
    2. 重视资源的合理使用而不是最少占用。
    • 大量并发任务,意味着什么?
    1. 重视性能;
    2. 重视可伸缩性。

    性能来自于

    • 算法选择与算法优化:排序、查找、空间-时间。
    • 操作系统/应用程序运行机制:IO多路复用;局部性原理;编程语言。
    • 硬件:CPU的充分利用_多线程/多进程;存储层级的理解和利用;多队列网卡。

    持续运行,意味着:稳定最重要;容错;日志和监控。

    (1)服务稳定包含的因素

    • 避免程序异常终止;
    • 持续高效的运算与通信。

    (2)如何才能做到稳定?

    KISS==Keep It Simple&Stupid (一看就懂)

    容错方面

    (1)错误不可避免(逻辑自身bug、程序运行环境、外部影响)

    (2)基本要求 - 错误范围可控

    • 一个用户的错误不要传染到其他用户;
    • 非核心功能的失效不要导致整个系统服务的失效。

    (3)基本应对 - 错误隔离和可快速恢复。

    4,游戏后台开发的方法论

    (1)本质上是应对海量服务的问题。

    (2)出发点:两种不同的困难

    • 事情本身逻辑很简单,但是并发规模非常大;
    • 事情本身的逻辑复杂,要经历复杂的处理步骤。

    (3)方法论 - 分治

    大的问题分解成小问题,小问题继续分解,最终在合适的力度下得到解决。

    服务分布化

    • 三层架构:接入-逻辑-存储;
    • 通用服务:微服务。

    内部复杂度应对:分层分块。

    (4)方法论 - 灰度

    什么是灰度:抛弃0/1思维;在不同的场景下提供不能的服务。

    在不同范畴维度的应用:服务降级;灰度分布。

    感悟:任何事情都不是非黑即白的,可以灰度发布,灰度服务(取中间值)。

    5,游戏服务器的相关参与者

    开发者:服务器程序员。

    开发伙伴:客户端程序员,游戏策划。

    构建-测试:测试工程师。

    部署维护:运维工程师。

    三、游戏服务器开发技术介绍

    1,算法

    (1)了解常见查找/排序算法的特点:利用算法来改善性能,胜于通过编译器选项、编程技巧;

    (2)根据业务情况合理的选择算法

    2,系统层面

    (1)对操作系统基础知识的了解

    • 处理器管理
    • 进程管理
    • 线程调度
    • 内存管理
    • IO管理
    • 权限管理 ...etc

    (2)对Linux操作系统的了解

    • 内核
    • 用户管理
    • 文件系统
    • 进程、线程
    • 进程间通信
    • 网络
    • 信号处理
    • 权限等

    3,开发工具

    • 对编译器gcc的了解
    • 对调试器gdb的了解
    • 对文档工具ar的了解
    • 对autotools的了解
    • 对Makefile的了解
    • 对性能分析工具的了解
    • 对内存泄露调试工具的了解
    • 对samba文件共享的了解
    • 对版本管理工具(cvs/svn/cc)的了解

    4,语言

    (1)选择编程语言的几个因素

    • 业务复杂度
    • 执行效率VS开发效率
    • 开发人员和团队能力

    (2)C/C++技能要求

    • 对C/C++的语法非常了解
    • 对Ansi C库函数非常了解
    • 对指针有正确而且牢固的认识
    • 对STL库非常了解
    • 对C/C++语言的内存分配机制非常了解
    • 对第三方框架的了解(如ACE/ICE等)

    5,脚本语言

    (1)Shell脚本

    • Linux下的程序开发,学会使用shell脚本会大大的提高工作效率;
    • 一些工作适合用shell来完成,开发效率更快;
    • shell脚本常常被用来做一些集成的工作。

    (2)程序内嵌脚本语言

    • 了解脚本(解释性语言)的优缺点;
    • 脚本在游戏开发中的适用范围;
    • Lua/Python/自定义脚本。

    6,软件设计技巧

    (1)化繁为简的重要途径:区分“变化性”是其中的关键。

    (2)设计原则 - SOLID

    • 单一责任原则
    • 开发-封闭原则
    • 里氏替换原则
    • 依赖倒置原则
    • 接口分离原则

    (3)设计模式:可以视为设计原则的应用。

    想清楚:用到这些方法、方式,它的原因是什么?

    7,Linux下的常用工具

    • 系统管理工具:ipcs/ps/top/...
    • 文件系统工具:ls/find/where/which/locate...
    • 文件处理工具:sed/grep/...
    • 性能检测工具:iostat/memstat...
    • SSH工具:ssh/ssh2/sshd/ssh2d/scp/...

    8,专项技术

    (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

    四、参考资料

    服务器_维基百科

    游戏服务器与普通服务器有什么区别_知乎

    Lua 为什么在游戏编程领域被广泛运用?_知乎

    五、总结

    在拿到offer的那一刻,我不知道游戏服务器端是做什么的。在部门大佬的指导和介绍下,我打开了本课程开始学习。课程总共有16节,我争取学习完一节课程后就整理,总结,吸收好这节课的内容,然后发布到博客上,希望我能坚持到底!

    如果有写的不好或需要补充的地方请及时提出来,我看到后会及时更新的。^_^

  • 相关阅读:
    Unity3d发布IOS(包含u3d自带IAP内购)的流程-小白篇(四)-Xcode配置发布部分
    U3D获取IOS设备所在时区、是否安装指定APP、判断真机还是模拟器
    Unity3d发布IOS(包含u3d自带IAP内购)的流程-小白篇(三)-u3d配置ios内购部分
    Unity3D 粒子系统
    Unity 3D 之Playerprefs
    物理公式
    C#之Lambda表达式
    C#中的Stack
    C#中的as(转)
    (转) Unity3D常用代码收集总结
  • 原文地址:https://www.cnblogs.com/OctoptusLian/p/9367578.html
Copyright © 2011-2022 走看看