# ToffeeHttp **Repository Path**: Foldcc/ToffeeHttp ## Basic Information - **Project Name**: ToffeeHttp - **Description**: 一套轻量级的Http网络通信模块,用于Unity开发,兼容IOS、Android、桌面平台 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2020-03-16 - **Last Updated**: 2021-01-15 ## Categories & Tags **Categories**: web-dev-toolkits **Tags**: None ## README # ToffeeHttp ![](https://img.shields.io/badge/Unity-5.0-blue) ![](https://img.shields.io/badge/Unity-2018-green) ![](https://img.shields.io/badge/Unity-2019-red) ## 介绍 ToffeeHttp是一款轻量级Http通信工具,可用于中小型游戏(或简单网络功能)的网络通信服务,ToffeeHttp具备灵活高易用的特点,可扩展,并将网络请求以及消息处理层单独分离,可自行自定义扩展。 使用范围如:网关服务器请求、排行榜、登录、注册等常规游戏功能。 ToffeeHttp通讯层使用UnityWebRequest,可以理解为是基于UnityWebRequest的高度封装,特点是轻量易用。 如果你需要让你的游戏快速具备网络功能可以选择使用该工具(例如在48小时游戏开发时...)。 ## 使用 首先你需要明白核心的运作方式,正常流程你需要如下步骤: * 初始化:初始化ToffeeHttpClient,你可以将他封装为一个单例或者直接使用New的方式创建(不推荐)。 * 注册:增加服务器配置列表,这一步的主要目的时规范化你的服务器请求地址。 * 网络请求:当完成服务器地址注册后,你可以在你的逻辑层任何位置使用SendHttp发送网络请求了。 #### 初始化ToffeeHttpClient 初始化客户端直接通过new ToffeeHttpClient() 即可,这里我一般将其创建后的对象放在一个全局单例中,例如创建一个NetWorkManager,在任何地方可以直接使用。 #### 注册服务器配置表 这是最关键的一步,如果你的服务器请求地址是192.168.0.1:1234/login,并且使用Post表单的方式请求,那么你的逻辑层只需要关心/login之后的东西,再次之前的都应该被扔到配置表中。 这样做的原因是: **逻辑层只关心发送的数据本身以及收到的数据**,其中发送的地址、端口、请求方式、消息处理方式都应该被放进配置表中,然后以一个自定义名称作为key,在发送的时候只需要输入Key和要发送的内容即可。 配置代码如下: ``` this.Client.AppendServer(Url, Port, 20, "LobbyServer_Get"); this.Client.AppendServer(Url, Port, 20, "LobbyServer_Post"); ``` 这段代码中,我配置了两个服务器LobbyServer_Get、LobbyServer_Post,他们的分别是Get、Post请求方式,其余配置一致 这里牵扯到两个关键配置:IRequestHandler、IMsgChannel,他们的作用分别是定义网络请求类型以及定义消息处理方式 例如游戏的大厅服务器只需要使用简单Post和Get请求,但对消息不需要额外处理,如果我的购买接口需要对消息做自定义规则的MD5加密验证,那么我们可以自行创建一个实现IMsgChannel的类,如下 ``` this.Client.AppendServer(Url, Port, 20, "PaymentServer_Post"); ``` 上面的意思是支付系列的服务器接口是Post表单请求方式同时消息需要MD5验证。 以此扩展,请求方式也可以自定义,至于请求方式本质使用了UnityWebRequest,因此可以参考Unity官方文档 #### 开始请求服务器 在上一步中我向HttpClient注册了3个服务器地址:LobbyServer_Get、LobbyServer_Post、PaymentServer_Post(建议实际开发时使用枚举或常量类的方式,规范化) 逻辑层现在只需要知道在什么情况用对应服务器Key,比如在支付的时候使用PaymentServer_Post。 发送示例: ``` WWWForm data = new WWWForm(); data.AddField(this.DataKey , this.DataValue); this.Client.HttpSend(this.Method , data , this.OnHttpResponse , "PaymentServer_Post"); ``` 这里的OnHttpResponse是请求回调,无论网络层错误还是请求成功都会触发该回调,要注意Method是区别不同接口的,根据你服务器的接口填写。 如果你反感WWWFrom表单,你可以自定义IRequestHandler,让其接收你自定义的网络数据类。 ## 结构 请求方式和消息处理方式推荐自行自定义,该工具自带了几个默认的封装,提供参考和基础使用。 IRequestHandler默认提供: * PostHandlerForm : post请求方式,通过表单方式请求网络消息 * PostHandlerJson : post请求方式,直接通过Json方式请求网络消息 * GetHandlerForm : get请求方式,通过表单方式传入数据,转换为键值string后发送(本质也是拼接uri) * GetHandlerString :get请求方式,通过拼接url和发送数据后发送 IMsgChannel默认提供: * MsgChannelDefault : 对发送、接收的消息不做任何处理。