#零、快速入门
##【套接字API】
- socket():因为还不会生成新的TCP连接,所以不存在TCP连接状态;
- connect():SYN→SYN/ACK→ACK(三次握手);
- 主动打开 – 客户端调用发起连接;
- 被动打开 – 服务器被动建立连接;
- bind():不会生成新的TCP连接,只是设置本地生成的套接字的监听端口号;
- listen():“被动打开”后,服务器进入Listen(待机)状态,等收到客户端发来的SYN数据包后就会开始生成新的套接字;
- accept():在建立TCP连接(处于ESTABLISHED状态下的新通信链路)后,获取连接的套接字的文件描述符用于通信;
- read()/write()/send()/recv()/sendto()/recvfrom():用于实际的数据收发,必须在ESTABLISHED状态下;
- shutdown():通知OS不要再写入/读取数据了。
SHUT_WR侧发送FIN→接收方返回FIN并进入CLOSE_WAIT→SHUT_WR侧收到返回FIN/ACK并释放通信链路→接收方收到关闭通信链路; - close():等同于调用shutdown(SHUT_RD|SHUT_WR)来同时关闭读写双方.
##【各网络层头信息】
- ocet: 8位位组,因为部分机器"一个字节(byte)不等于8位(bit),以下单位皆为ocet;
- 以太网帧: 前导码(7) + SFD帧首定界符(1) + 目的地址(6) + 源地址(6) + 长度/类型(2) + 数据/LLC(46~1500) + FCS帧检验序列(4);
- 4层传输层: TCP(20) + 3层网络层–IP(20) + 2层数据链路层–以太网协议(26) + 物理层(1层) = 66ocet包头大小;
- 数据块: OSI参考模型,若发送小数据块,则头信息将占据大部分通信,加重物理层负担;若用1400字节的大数据块,则可达理论速度;
- 网络游戏数据块: 数据单位有时不得不20个字节左右,性能只有理论的几分之一.如100Mbit/s发送最小的数据时可达148810次;
##【UDP的使用】 - 发送那些与可靠性相比速度更为重要的数据;比如FPS中移动消息,因TCP在数据丢失是会重发从而造成较大的通信延迟,UDP不会重发.
- 为了实现NAT遍历功能;
##【多核与线程】 - 客户端:根据音效处理、AI、网络、主循环、渲染等方面,用3~5个线程;
- 逻辑处理最好不要使用多线程。
##【提高开发效率】 - Windows下开发,Linux部署;
- 服务端 和 客户端在碰撞检测等方面使用相同的游戏处理代码;
- 使用封装保持源代码级的兼容性;
- 降低OS差异性的封装工作;
#二、何为网络游戏
##【商业层面的要求】网络游戏是制造业+服务业
- 有趣:
- 尽早开发出原型并迭代;
- 有效招募玩家尽早测试(解决明显不佳的平衡性; 无趣/引起不满的游戏内容):
- 封测(平衡性,服务器负载等):5003000名测试26月的试玩;必须充分测试(一经发行就遭遇失败的游戏是无法复兴的)
- 公测(宣传营销目的,不限人数):系统负载与正式服务是等同的
- 不断更新,运营时间久(具有可扩展性),评价高(提供多种收费选择)
- 定期补丁:常规bug修复,细微的平衡性调整,系统改进等.(公开测试服供尝鲜玩家试玩);
- 大型扩展:追加与之前有极大差别的游戏系统新玩法等(需准备测试服,为避免泄漏,会严格限制人数);
- 紧急维护;
- [分别设置问题修复+新内容开发团队; 尽可能分离源代码和数据内容; 模块化,避免干扰]。
- 降低成本(减少服务器数量;节约带宽;从小规模开始,确保可扩展性);
从小规模开始–将风险降到最低,不要错过取胜机会; - 希望有大量玩家参与(适配多个平台;发行多国版);
- 不给玩家添麻烦:
- 低成本、尽早可靠地消除攻击者,比如防止打金外挂 – 因其占用服务器并产生大量流量;
- 根据情况增加GM巡视;
- 日志分析;
- 调整经济系统;
- 减少停服:“服务器停一次,就会流失%1玩家”; 计划内停服维护影响不大;
- 游戏平衡和经济缺陷:立刻修复, 回滚, 封号等处理; 一定要即时精准;
- 服务器崩溃:不可避免,应根据游戏类型充分准备; 实现自动重启机制;
- 超负荷:设计时要做到部分设备超负荷不会影响到整体; 设法减轻符合; 超负荷时通知运维和用户;
- 低成本、尽早可靠地消除攻击者,比如防止打金外挂 – 因其占用服务器并产生大量流量;
- 更佳的用户体验:
- 频繁进行各类活动,使玩家能长时间游戏不会厌烦;
- 反馈游戏结果:游戏元信息 – 排行榜; 成就; 其他统计; 记录并提供给玩家;
- 促进玩家间的交流;玩家间更易相遇
- 玩家匹配:“网络游戏是一种交流工具”; 自动选择(根据各种条件快速匹配) 游戏大厅 虚拟世界(可实时交流)
##【人员和组织】 开发人员:80% 运维:20%
- 开发(策划,程序,美工,测试,工具制作) 小型2~4人;多数情况20人左右;大型150+;
- 运维(安全,负载,OS管理,数据备份,紧急情况处理);
- 销售(市场调研,商业调研,资金筹备,质量保证,营业活动,活动举办,商业数据分析等);
- 开发团队不可或缺的4中职业:项目总监(统筹管理), 程序, 美术, 策划
- 多数20人团队配置:总监2人(技术,美术) 程序4人(架构,底层,逻辑,工具) 美术6(角色,动画,地图)建议外包 策划8人(关卡,剧本,脚本);
- 不同类型,人员配置不同; 小型企业需避开电影式游戏,选择工具/社交等小型游戏;
##【所需技术与经验】
- 编程基本技术:
- 设计:技术(结构化,模块化,面向对象,设计模式等); 任务(并发性,事件驱动,错误处理,容错性,可用性); 质量(定义, 基准, 检测); UML;
- 架构: 管理(计划,预算); 编码(多语言