Unity 3D 笔记(十七)Unity/C# Socket 网络笔记6

本篇核心知识点:自定义 Protobuf 协议新增流程、TCP 分包 / 粘包底层完整处理逻辑、数据库 MySql 连接框架、数据库实体与表映射、用户登录注册业务设计、第三方登录底层原理、验证码 / 防沉迷 / 苹果税 / 渠道流量行业拓展知识

一、前后端统一新增 Protobuf 协议完整流程

1 概念

CS/SC 成对协议两端完全同步定义,客户端与服务端新建一模一样 Protobuf 实体类,通过协议名匹配消息回调,新增业务无需修改底层收发框架,仅新增协议、注册监听即可使用。

2 特性 / 规则

  1. CS=Client 请求,SC=Server 回执,请求与应答一一对应;

  2. 协议类必须继承统一 MessageBase 基类,重写 ProtoName 协议名字符串;

  3. 实体字段使用 ProtoMember 标记,序号前后端保持一致;

  4. 客户端、服务端两份协议代码完全复制,不能出现字段、名称差异;

  5. 客户端通过 RegisterProto 注册回调函数,收到对应消息自动执行业务逻辑。

3 语法 & 代码片段

复制代码
// 客户端请求协议
[ProtoContract]
public class CSTest : MessageBase{
    [ProtoMember(1)]
    public string MsgContent;
    public override string ProtoName => "CSTest";
}
// 服务回执协议
[ProtoContract]
public class SCTest : MessageBase{
    [ProtoMember(1)]
    string RetMsg;
    public override string ProtoName => "SCTest";
}
// 发送+注册回调
NetManager.Instance.SendMessage(new CSTest(){MsgContent = "测试消息"});
NetManager.Instance.RegisterProto("SCTest", RecvTestMsg);
void RecvTestMsg(MessageBase msg){
    SCTest data = msg as SCTest;
    Debug.Log("服务端返回:" + data.RetMsg);
}

4 相关知识点对比

硬编码底层分发 VS 标准化协议新增流程

硬编码:每新增消息修改解析核心代码,极易引入 Bug; 标准化流程:底层 IO、解析逻辑完全固定,仅新增业务实体与回调,拓展零侵入。

5 模块拓展

大型项目统一协议文档,前后端开发同步更新,联调时快速核对字段序号、协议名称。

二、TCP 分包、粘包底层完整处理逻辑

1 概念

TCP 是流式无边界协议,单次接收字节可能小于一条完整消息(分包)、多条消息合并接收(粘包),缓冲区双指针 + 2 倍自动扩容 + 循环解析实现兼容两种场景。

2 特性 / 规则

  1. 缓冲区默认容量 1024 字节,剩余空间不足时循环二倍扩容,不一次性超大分配节省内存;

  2. 每次接收数据写入 writeIndex,通过包头总长度判断数据是否完整;

  3. 单缓冲区多条完整消息循环递归解析,避免粘包残留;

  4. 消息处理完毕 Compact 前移有效数据,释放前端空闲内存,减少扩容触发次数。

3 语法 & 代码片段

复制代码
// 缓冲区扩容逻辑
public void Expand(int needSize){
    int cap = 1024;
    while (cap < DataLen + needSize) cap *= 2;
    byte[] newBuf = new byte[cap];
    Array.Copy(buffer, readIndex, newBuf, 0, DataLen);
    buffer = newBuf;
    writeIndex = DataLen;
    readIndex = 0;
}
// 循环解析处理粘包分包
void ParseBuffer(){
    while(DataLen >= 8){
        int totalLen = ReadHeadLen();
        if(DataLen < totalLen) break;
        // 解析完整消息
        DecodeOneMsg();
        Compact();
    }
}

4 相关知识点对比

固定超大缓冲区 VS 动态二倍扩容

固定大数组:闲置时刻大量内存占用,上千连接内存溢出; 动态扩容:按需增长,小包维持低内存占用,大数据逐步扩容平衡性能与内存。

5 模块拓展

线上服务可自定义扩容基准,高频短消息场景调低扩容倍数优化内存。

三、MySql 数据库连接框架使用

1 概念

服务端引入成熟 MySql 操作类库,封装全局数据库管理器,统一建立连接、增删改查,客户端禁止直连数据库,所有数据校验、持久化交由服务端处理防作弊。

2 特性 / 规则

  1. 客户端不能直接访问数据库,所有数据请求通过 Socket 转发服务端校验;

  2. 数据库连接参数:IP、账号、密码、库名统一封装配置;

  3. 可视化工具(Navicat 等)快速建表,替代手写 CMD 命令;

  4. ORM 实体类与数据表字段一一对应,自动映射读写数据。

3 语法 & 代码片段

复制代码
// 数据库管理器核心连接
public class MysqlManager{
    private MySqlConnection conn;
    public void Connect(){
        string connStr = "server=127.0.0.1;uid=root;pwd=123456;database=GameDB";
        conn = new MySqlConnection(conn);
        conn.Open();
    }
}

4 相关知识点对比

客户端直连数据库 VS 服务中转读写

客户端直连:玩家可篡改本地数据、破解库账号,外挂作弊泛滥; 服务中转:所有数据修改服务校验,杜绝本地篡改,游戏数据安全。

5 模块拓展

数据库连接池优化,避免频繁创建销毁连接消耗性能。

四、数据库表设计与实体映射

1 概念

服务端创建用户表存储账号、密码、登录时间等玩家数据,C# 实体类字段名、类型与数据表完全匹配,ORM 框架自动映射实现增删改查。

2 特性 / 规则

  1. 数据表主键 ID 设置自增、非空、唯一约束;

  2. 用户名、密码字段非空,登录时间 DateTime 类型记录上线记录;

  3. 实体类添加表名特性标记,类名与数据表名不一致时手动指定;

  4. 实体字段与库列名大小写、拼写必须完全一致,否则映射失败。

3 语法 & 代码片段

复制代码
[Table("user")]
public class UserEntity{
    public int Id;
    public string UserName;
    public string Password;
    public DateTime LoginTime;
}

4 相关知识点对比

手写 SQL 字符串 VS ORM 实体映射

手写 SQL:拼接字符串易出现注入漏洞,维护繁琐; ORM 映射:面向对象操作,自动生成语句,安全易维护。

5 模块拓展

新增背包、道具、角色属性数据表,配套对应实体类管理游戏业务数据。

五、登录注册业务协议与结果枚举

1 概念

定义注册、登录专用 CS/SC 协议,使用枚举区分业务返回结果(成功、账号已存在、密码错误、用户不存在等),服务端查表校验后下发回执给客户端。

2 特性 / 规则

  1. 注册枚举:注册成功、账号重复、非法参数;

  2. 登录枚举:登录成功、账号不存在、密码错误、登录超时;

  3. 服务端收到注册消息查表,无重复账号插入数据库;

  4. 登录时比对库内密码,匹配下发登录成功消息。

3 语法 & 代码片段

复制代码
public enum RegisterResult{
    Success,
    AccountExist,
    IllegalParam
}
[ProtoContract]
public class CSRegister : MessageBase{
    [ProtoMember(1)] public string UserName;
    [ProtoMember(2)] public string Pwd;
    public override string ProtoName => "CSRegister";
}

4 相关知识点对比

纯字符串返回状态 VS 枚举统一结果码

字符串返回:拼写易出错,前后端文本不匹配导致判断异常; 枚举数字码:统一规范,联调无文字歧义,便于判断分支。

5 模块拓展

增加注册类型枚举(手机号 / 邮箱注册),区分不同注册渠道。

六、行业底层拓展知识(验证码 / 第三方登录 / 渠道规则)

1 概念

游戏项目上线配套登录、支付、渠道 SDK 底层原理,面试高频拓展业务知识点。

2 特性 / 规则

(1)短信验证码机制
  1. 客户端请求验证码→游戏服务转发短信服务商→运营商下发短信;

  2. 服务端缓存验证码,用户提交时比对校验;

  3. 单账号每日获取次数限制,控制第三方短信成本。

(2)第三方 QQ / 微信登录
  1. 接入腾讯 SDK,跳转授权获取唯一 UID;

  2. UID 作为账号存入数据库,无需用户重复输入账号密码;

  3. 渠道分成规则:平台抽取 9 成,游戏厂商仅留存一成流水。

(3)苹果税与渠道差异
  1. iOS 内购充值苹果抽取 30% 分成,商品定价高于安卓;

  2. iOS 生态封闭,只能 AppStore 分发;安卓开源多渠道,付费转化率更低。

(4)防沉迷与实名制
  1. 未成年人账号限时游玩,通过身份证 KYC 校验实现;

  2. 未完成实名账号限制充值、游戏时长。

(5)渠道投流与广告变现
  1. 抖音、应用商店投放按下载 / 付费结算流量费用;

  2. 广告变现游戏通过观看广告发放道具,广告平台结算收益。

3 相关知识点对比

账号密码原生登录 VS 第三方一键登录

原生登录:用户需手动注册,转化低; 第三方登录:依托平台流量,用户一键进入,新增玩家效率更高。

5 模块拓展

面试高频业务场景提问,简历项目可写入登录、防沉迷、渠道 SDK 相关拓展功能。

综合拓展

1 完整业务开发流水线

1)前后端同步新增 CS/SC 协议;2)客户端按钮发送请求;3)服务接收解析;4)MySql 查表校验;5)生成回执消息下发;6)客户端回调更新 UI 界面。

2 高频 Bug 排查清单

协议解析失败:前后端 ProtoMember 序号、字段名不一致;

数据库查询无数据:实体与表字段不匹配、连接账号密码错误;

分包粘包消息丢失:缓冲区 Compact 复用逻辑缺失;

客户端无法登录:服务未做账号查重校验。

3 核心点

TCP 分包粘包解决方案、MySql ORM 实体映射、客户端禁止直连数据库原因、第三方登录底层流程、短信验证码成本机制、苹果税渠道分成规则。

4 进阶拓展学习方向

数据库连接池、玩家数据异步存档、RSA 登录加密、断线重连、多渠道 SDK 整合。

5 实战落地要求

独立完成账号注册、登录完整前后端业务,包含数据库建表、协议定义、消息收发、结果弹窗展示,作为简历核心前后端一体化项目。

相关推荐
数智化管理手记1 小时前
财务大数据怎么管住资金风险?财务大数据和财务数智化到底怎么结合?
大数据·网络·数据库·人工智能·数据挖掘
CPETW2 小时前
企业版配套软件介绍 ---- USB TO SPI_ (Excel)-Microwire
网络·科技·单片机·嵌入式硬件·电子
三8442 小时前
使用Samba/NFS实现文件共享/自动挂载共享目录/autofs自动挂载服务
linux·服务器·网络
计算机魔术师3 小时前
宇树发布轮足机器人 As2-W:6m/s速度、IP54防水、30km续航
网络·机器人
高铭杰3 小时前
万物皆可KV(2)SurrealDB 存储布局分析
linux·服务器
Bobolink_3 小时前
跨境网络“无限流量”套餐的真实用法,买之前先看懂细则
网络·流量·跨境网络
万事可爱^3 小时前
Claude 新发布的 Opus 5,系统提示语删了 80%,半价还能逼近 Fable 5
android·服务器·数据库·人工智能·claude
geovindu3 小时前
CSharp: Iterative Algorithms
开发语言·后端·算法·c#·.net·迭代算法
XTIOT6663 小时前
零部件 DPM 码扫码枪生产厂家:工业 DPM 设备多工位组网与 MES/ERP 数据集成方案
网络·单片机·嵌入式硬件·物联网·计算机视觉