• 百万在线:大型游戏服务端开发
  • 百万在线:大型游戏服务端开发
21年品牌 40万+商家 超1.5亿件商品

百万在线:大型游戏服务端开发

①全新正版,现货速发,7天无理由退换货②天津、成都、无锡、广东等多仓就近发货,订单最迟48小时内发出③无法指定快递④可开电子发票,不清楚的请咨询客服。

71.8 7.3折 99 全新

库存3件

浙江嘉兴
认证卖家担保交易快速发货售后保障

作者罗培羽

出版社机械工业出版社

ISBN9787111687559

出版时间2021-08

装帧平装

开本16开

定价99元

货号31233299

上书时间2024-10-14

倒爷图书专营店

三年老店
已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
商品描述
目录
前 言<br/>第一部分 学以致用<br/>第1章 从角色走路说起   2<br/>1.1 每走一步都有事情发生  2<br/>1.1.1 走路的五个步骤  3<br/>1.1.2 服务端视角的游戏流程  3<br/>1.2 从网络编程着手   4<br/>1.2.1 用打电话做比喻  4<br/>1.2.2 最少要掌握的三个概念  5<br/>1.2.3 搭一个简单的服务器  6<br/>1.2.4 让角色走起来  8<br/>1.3 能够承载多少玩家  9<br/>1.3.1 单线事件模型  9<br/>1.3.2 承载量估算  9<br/>1.4 用分布式扩能  10<br/>1.4.1 多个程序协同工作  11<br/>1.4.2 三个层次的交互  11<br/>1.4.3 搭个简单的分布式服务端  12<br/>1.4.4 一致性问题  14<br/>1.5 回头看操作系统  15<br/>1.5.1 多进程为什么能提升性能  15<br/>1.5.2 阻塞为什么不占CPU  16<br/>1.5.3 线程会占用多少资源  17<br/>1.6 一张地图的极限  18<br/>1.6.1 难以分割的业务  19<br/>1.6.2 在延迟和容量间权衡  19<br/>1.7 万物皆Actor  19<br/>1.7.1 灵感来自Erlang  20<br/>1.7.2 对世界的抽象  20<br/>1.7.3 为何适用  22<br/>第2章 Skynet入门精要  25<br/>2.1 下载、编译、运行  26<br/>2.1.1 下载和编译  26<br/>2.1.2 运行范例  27<br/>2.2 理解Skynet  28<br/>2.2.1 节点和服务  28<br/>2.2.2 配置文件  29<br/>2.2.3 目录结构  30<br/>2.2.4 启动流程  31<br/>2.3 第一个程序PingPong  32<br/>2.3.1 功能需求  32<br/>2.3.2 学习服务模块  32<br/>2.3.3 代码实现  33<br/>2.3.4 运行结果  35<br/>2.4 写Echo,练习网络编程  35<br/>2.4.1 功能需求  36<br/>2.4.2 学习网络模块  36<br/>2.4.3 代码实现  37<br/>2.4.4 运行结果  37<br/>2.5 做聊天室,学习多人交互  38<br/>2.5.1 功能需求  38<br/>2.5.2 代码实现  38<br/>2.6 做留言板,使用数据库  39<br/>2.6.1 功能需求  39<br/>2.6.2 学习数据库模块  40<br/>2.6.3 准备数据库  40<br/>2.6.4 代码实现  43<br/>2.6.5 运行结果  45<br/>2.7 监控服务状态  45<br/>2.7.1 启用调试控制台  45<br/>2.7.2 监控指令  46<br/>2.8 使用节点集群建立分布式系统  48<br/>2.8.1 功能需求  48<br/>2.8.2 学习集群模块  48<br/>2.8.3 节点配置  49<br/>2.8.4 代码实现  49<br/>2.8.5 运行结果  51<br/>2.8.6 使用代理  52<br/>2.9 使用Skynet的注意事项  52<br/>2.9.1 协程的作用  52<br/>2.9.2 扣除金币的Bug  52<br/>第3章 案例:《球球大作战》  54<br/>3.1 功能需求  54<br/>3.2 方案设计  55<br/>3.2.1 拓扑结构  55<br/>3.2.2 各服务功能  56<br/>3.2.3 消息流程  57<br/>3.2.4 设计要点  57<br/>3.3 搭架子:目录结构和配置  58<br/>3.3.1 目录结构  58<br/>3.3.2 配置文件  58<br/>3.3.3 第1版主服务  59<br/>3.3.4 启动脚本  60<br/>3.3.5 服务配置  60<br/>3.4 磨刀工:封装易用的API  62<br/>3.4.1 定义属性  63<br/>3.4.2 启动逻辑  63<br/>3.4.3 消息分发  64<br/>3.4.4 辅助方法  65<br/>3.4.5 编写空服务  66<br/>3.5 分布式登录流程  67<br/>3.5.1 完整的登录流程  67<br/>3.5.2 掉线登出流程  69<br/>3.5.3 协议格式  69<br/>3.6 代码实现:gateway  70<br/>3.6.1 连接类和玩家类  70<br/>3.6.2 接收客户端连接  71<br/>3.6.3 处理客户端协议  74<br/>3.6.4 编码和解码  75<br/>3.6.5 消息分发  76<br/>3.6.6 发送消息接口  78<br/>3.6.7 确认登录接口  79<br/>3.6.8 登出流程  80<br/>3.7 代码实现:login  81<br/>3.7.1 登录协议  81<br/>3.7.2 客户端消息分发  81<br/>3.7.3 登录流程处理  82<br/>3.8 代码实现:agentmgr  83<br/>3.8.1 玩家类  83<br/>3.8.2 请求登录接口  84<br/>3.8.3 请求登出接口  86<br/>3.9 代码实现:nodemgr  86<br/>3.10 代码实现:agent(单机版)  87<br/>3.10.1 消息分发  87<br/>3.10.2 数据加载  87<br/>3.10.3 保存和退出  88<br/>3.10.4 单机测试  88<br/>3.11 测试登录流程  89<br/>3.11.1 第2版主服务  89<br/>3.11.2 单节点测试  90<br/>3.11.3 跨节点测试  90<br/>3.12 战斗流程梳理  91<br/>3.12.1 战斗流程  91<br/>3.12.2 协议  91<br/>3.13 代码实现:场景服务  93<br/>3.13.1 Ball类  93<br/>3.13.2 Food类  94<br/>3.13.3 进入战斗  95<br/>3.13.4 退出战斗  97<br/>3.13.5 操作移动  97<br/>3.13.6 主循环  97<br/>3.13.7 移动逻辑  99<br/>3.13.8 生成食物  99<br/>3.13.9 吞下食物  100<br/>3.13.10 第3版主服务  101<br/>3.14 代码实现:agent(跨服务器版)  101<br/>3.14.1 多个模块  101<br/>3.14.2 进入战斗  101<br/>3.14.3 退出战斗  103<br/>3.14.4 最后的辅助方法  103<br/>3.14.5 运行结果  104<br/>3.15 改进  104<br/>第4章 Skynet进阶技法  106<br/>4.1 用“长度信息”解TCP包  107<br/>4.1.1 长度信息法  107<br/>4.1.2 使用netpack模块解析网络包  107<br/>4.1.3 测试小案例  110<br/>4.1.4 阻塞方法的时序  113<br/>4.2 用Json序列化协议  114<br/>4.2.1 安装lua-cjson模块  115<br/>4.2.2 使用lua-cjson模块  115<br/>4.2.3 设计完整协议格式  117<br/>4.2.4 编码Json协议  117<br/>4.2.5 解码Json协议  118<br/>4.2.6 测试  118<br/>4.3 用Protobuf高效传输  119<br/>4.3.1 什么是Protobuf  120<br/>4.3.2 安装Protobuf和pbc  120<br/>4.3.3 编译proto文件  121<br/>4.3.4 编码和解码  121<br/>4.4 如何设计游戏数据库  122<br/>4.4.1 传统设计方法  123<br/>4.4.2 传统的数据库难以应对版本更新  124<br/>4.4.3 Key-Value表结构  125<br/>4.4.4 用Protobuf描述玩家数据  126<br/>4.4.5 创建角色  126<br/>4.4.6 读取角色数据  127<br/>4.4.7 应对游戏版本更新  128<br/>4.4.8 拆分数据表  129<br/>4.5 如何关闭服务器  130<br/>4.5.1 管理控制台  130<br/>4.5.2 关闭服务器的流程  131<br/>4.5.3 阻止新玩家连入  132<br/>4.5.4 缓缓踢下线  133<br/>4.5.5 测试关闭服务器的功能  135<br/>4.6 怎样做定时系统  136<br/>4.6.1 每天第一次登录  136<br/>4.6.2 定时唤醒  137<br/>4.7 断线重连  138<br/>4.7.1 原理解析  139<br/>4.7.2 身份标识  139<br/>4.7.3 消息缓存  140<br/>4.7.4 处理重连请求  141<br/>4.7.5 断线处理  142<r/>4.7.6 测试  143<br/>第二部分 入木三分<br/>第5章 你好,C++并发世界  146<br/>5.1 从HelloWorld开始  147<br/>5.1.1 HelloWorld  147<br/>5.1.2 用CMake构建工程  147<br/>5.1.3 “学猫叫”小例子  149<br/>5.1.4 各文件的依赖关系  151<br/>5.1.5 模仿Skynet写底层  151<br/>5.2 多核多线程  153<br/>5.2.1 操作系统调度原理  153<br/>5.2.2 创建线程对象  154<br/>5.2.3 模仿Skynet开启线程  155<br/>5.2.4 等待线程退出  158<br/>5.2.5 Worker设计模式  159<br/>5.3 探索C++对象模型  160<br/>5.3.1 Actor模型的消息类  160<br/>5.3.2 栈、堆、智能指针  161<br/>5.3.3 对象的内存分布  162<br/>5.4 队列与锁  162<br/>5.4.1 模仿Skynet写服务类  163<br/>5.4.2 锁的初始化  164<br/>5.4.3 多线程队列插入  166<br/>5.4.4 在多线程队列取出元素  166<br/>5.4.5 三个回调方法  168<br/>5.4.6 分析临界区  168<br/>5.5 多线程下的对象管理  170<br/>5.5.1 使用哈希表  170<br/>5.5.2 浅析读写锁  171<br/>5.5.3 新建服务  172<br/>5.5.4 查找服务  172<br/>5.5.5 删除服务  173<br/>5.5.6 程序终于能运行了  174<br/>5.6 充分利用CPU  175<br/>5.6.1 全局消息队列  175<br/>5.6.2 插入和弹出  177<br/>5.6.3 标志位  178<br/>5.6.4 模仿Skynet发送消息  179<br/>5.6.5 工作线程调度  180<br/>5.7 演示程序PingPong  183<br/>5.7.1 辅助函数  183<br/>5.7.2 编写ping服务  183<br/>5.7.3 测试  184<br/>5.8 条件变量与唤醒机制  185<br/>5.8.1 改进版线程调度  185<br/>5.8.2 如何使用条件变量  186<br/>5.8.3 工作线程的等待与唤醒  188<br/>5.8.4 测试  189<br/>5.9 后台运行  189<br/>第6章 图解TCP网络模块  191<br/>6.1 启动网络线程  192<br/>6.1.1 方案设计  192<br/>6.1.2 新增两种消息  192<br/>6.1.3 套接字到底是什么  193<br/>6.1.4 模仿Skynet的网络线程  195<br/>6.1.5 自定义连接类  197<br/>6.2 半小时搞懂Epoll的用法  201<br/>6.2.1 从轮询说起  202<br/>6.2.2 创建epoll对象  203<br/>6.2.3 直观理解监听列表  204<br/>6.2.4 最重要的步骤:等待  207<br/>6.2.5 监听对象的生命周期  210<br/>6.2.6 水平触发和边缘触发  211<br/>6.3 打开监听端口  212<br/>6.3.1 三个API:socket、bind和listen  212<br/>6.3.2 如何保障线程安全  215<br/>6.3.3 关闭连接  215<br/>6.3.4 测试:感知新连接  216<br/>6.4 网络事件分发  216<br/>6.4.1 拆分事件  217<br/>6.4.2 接收新客户端  218<br/>6.4.3 传递可读写事件  220<br/>6.4.4 测试:Echo程序  220<br/>6.5 如何安全读写数据  222<br/>6.5.1 消息分支  222<br/>6.5.2 可读、可写、关闭  224<br/>6.5.3 处理莫名其妙退出的问题  226<br/>6.5.4 PIPE信号处理  228<br/>6.6 写缓冲区满  229<br/>6.6.1 实验:发送大数据  229<br/>6.6.2 解决方法1:设置SNDBUFFORCE  230<br/>6.6.3 解决方法2:自写缓冲区  230<br/>第7章 嵌入Lua脚本语言  234<br/>7.1 方案设计  234<br/>7.1.1 隔离数千个服务  235<br/>7.1.2 目录结构  235<br/>7.1.3 启动流程  235<br/>7.2 嵌入Lua虚拟机  236<br/>7.2.1 下载、编译源码  236<br/>7.2.2 理解静态库  237<br/>7.2.3 最重要的结构:lua_State  238<br/>7.2.4 从创建到销毁  239<br/>7.2.5 编译指令  240<br/>7.3 C++调用Lua方法  241<br/>7.3.1 代码示例  241<br/>7.3.2 涉及4个API  242<br/>7.3.3 直观理解Lua栈  243<br/>7.3.4 再回顾调用方法  244<br/>7.4 Lua调用C++函数  245<br/>7.4.1 Sunnet的脚本模块  245<br/>7.4.2 写接口  246<br/>7.4.3 分析4个API  246<br/>7.4.4 还需注册函数  248<br/>7.4.5 思考题  250<br/>7.5 Lua版的PingPong  251<br/>7.5.1 封装两个新接口  251<br/>7.5.2 Lua版的ping服务  253<br/>7.5.3 运行结果  254<br/>7.5.4 参数序列化  255<br/>7.6 Lua版聊天室  256<br/>7.6.1 继续封装  256<br/>7.6.2 Lua版的聊天服务  258<br/>7.6.3 运行结果  258<br/>7.6.4 拓展说明  259<br/>第三部分 各个击破<br/>第8章 同步算法  262<br/>8.1 同步难题  263<br/>8.1.1 一种移动方法  263<br/>8.1.2 瞬移、顿挫、打不中  264<br/>8.1.3 抖动和延迟  265<br/>8.2 客户端障眼法  267<br/>8.2.1 插值算法  267<br/>8.2.2 缓存队列  268<br/>8.2.3 主动方优先  269<br/>8.3 各类同步方案及适用场景  269<br/>8.3.1 三种同步方案  270<br/>8.3.2 适用场景  271<br/>8.3.3 案例:《天涯明月刀》  271<br/>8.3.4 案例:《王者荣耀》 

   相关推荐   

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP