这篇主要是提供完整的代码。。。注释较少请见谅,如果对流程有疑惑可以参考**《Unity游戏开发 基于多线程的Http网络框架基础篇》
完整篇除了基础篇讲到的内容之外,出于对性能和安全性的考虑还覆盖了如下内容:
单例:(BaseController)
**关于单例请参考《Unity游戏开发 单例基类》
对象池: (Poolable、PoolManager)
加密:(Encry)
这些内容后续有时间写的话会把链接放上来,目前把所有代码贴出来主要是方便直接拷贝就可以使用了。
在更完整的版本里还有一个事件分发的处理,后续如果有时间写UI框架的话会把这块关联起来。
目录
使用示例
void Start()
{
// 发起请求
HttpManager.instance.HttpPost(1, "http://es.dota2.uuu9.com/players", false);
}
int id = 0; int code = 0; string data = "";
void Update()
{
// 从接受队列取得消息(此处本来是和lua的http模块以及ui框架结合做错误码处理以及网络事件分发的)
if(HttpManager.instance.TryGetResPonse(ref id, ref code, ref data))
{
UnityEngine.Debug.LogError(data);
}
}
这里加密传了false,如果传入true的话会将返回的消息用Encry模块去解密。
这个需要服务器的配合,两边约定好加密的密钥。
目前只是对接收到的数据进行了解密处理,如果有需要的话也可以和服务器做协商,在发送的json参数中用某个字段将实际游戏中用到的参数通过Encry加密后保存起来发送给服务器,服务器解密后再做处理。
HttpManager(http管理器)
using System.Text;
public enum HttpType
{
Get,
Post,
}
public class HttpManager : BaseController<HttpManager>
{
private HttpClient _httpClient = new HttpClient();
private StringBuilder _getBuilder = new StringBuilder();
public void HttpGet(int key, string url, bool encry, string param = null)
{
_getBuilder.Clear();
_getBuilder.Append(url);
if (param != null)
{
_getBuilder.Append("?");
_getBuilder.Append(param);
}
_httpClient.AddHttpReq(key, HttpType.Get, _getBuilder.ToString(), encry);
}
public void HttpPost(int key, string url, bool encry, string param = null)
{
_getBuilder.Clear();
_getBuilder.Append(url);
_httpClient.AddHttpReq(key, HttpType.Post, _getBuilder.ToString(), encry, param);
}
public bool TryGetResPonse(ref int key, ref int code, ref string data)
{
HttpPack pack;
if (_httpClient.TryGetResponse(out pack))
{
key = pack.key;
code = pack.code;
data = pack.response;
pack.Dispose();
return true;
}
return false;
}
}
HttpClient(http核心逻辑)
using System.Net;
using System.Text;
using System.IO;
using System.Threading;
using System;
public class HttpClient
{
private Encry _encry = new Encry("testkey");
private Thread _sendTask;
private BlockQueue<HttpPack> _sendList = new BlockQueue<HttpPack>(10);
private BlockQueue<HttpPack> _receiveList = new BlockQueue<HttpPack>(10);
#region 外部接口
public bool TryGetResponse(out HttpPack pack)
{
if (_receiveList.count > 0)
{
pack = _receiveList.Dequeue();
return true;
}
else
{
pack = null;
return false;
}
}
public void AddHttpReq(int key, HttpType type, string url, bool encry, string param = null)
{

本文提供了一个完整的Unity游戏开发中使用的多线程HTTP网络框架,包括HttpManager、HttpClient、HttpPack、BlockQueue、Encry等组件。除了基础的网络请求功能,还涉及到了单例模式(BaseController)、对象池(Poolable、PoolManager)以及加密处理(Encry)。虽然注释较少,但整个框架设计全面,适合直接应用于项目中。加密功能需要与服务器端配合,确保数据的安全传输。
最低0.47元/天 解锁文章
735





