这部分为服务器的网络通信底层实现,也是游戏服务器的核心内容,下面将结合具体的代码以及代码注释一一介绍底层的实现,可能会涉及到一些C#的网络编程知识,对C#语言不熟悉没关系,笔者对C#的运用也仅仅停留在使用阶段,只需通过C#这门简单易懂的语言来窥探整个服务器通信底层搭建起来的过程,来到我们的NetFrame网络通信框架,这部分干货很多,我将用完整的代码和详尽的注释来阐明其意。
将SocketModel分为了四个层级,分别为:
(1)type:一级协议 用于区分所属模块,如用户模块
(2)area:二级协议 用于区分模块下的所属子模块,如用户模块的子模块为道具模块1、装备模块2、技能模块3等
(3)command:三级协议 用于区分当前处理逻辑功能,如道具模块的逻辑功能有“使用(申请/结果),丢弃,获得”等,技能模块的逻辑功能有“学习,升级,遗忘”等;
(4)message:消息体 当前需要处理的主体数据,如技能书
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NetFrame.auto { public class SocketModel { 一级协议 用于区分所属模块 type {get;set;} 二级协议 用于区分 模块下所属子模块 area { get; set; } 三级协议 用于区分当前处理逻辑功能 command { get; set; } 消息体 当前需要处理的主体数据 message { get; set; } public SocketModel() { } public SocketModel(byte t,int a,int c,object o) { this.type = t; this.area = a; this.command = c; this.message = o; } public T GetMessage<T>() { return (T)message; } } }
同时封装了一个消息封装的方法,收到消息的处理流程如图所示:
序列化: 将数据结构或对象转换成二进制串的过程。
反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。