Unity游戏开发 基于多线程的Http网络框架完整篇

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇主要是提供完整的代码。。。注释较少请见谅,如果对流程有疑惑可以参考**《Unity游戏开发 基于多线程的Http网络框架基础篇》

完整篇除了基础篇讲到的内容之外,出于对性能和安全性的考虑还覆盖了如下内容:

单例:(BaseController

       **关于单例请参考《Unity游戏开发 单例基类》

对象池: (PoolablePoolManager

加密:(Encry

这些内容后续有时间写的话会把链接放上来,目前把所有代码贴出来主要是方便直接拷贝就可以使用了。

在更完整的版本里还有一个事件分发的处理,后续如果有时间写UI框架的话会把这块关联起来。

目录

使用示例

HttpManager(http管理器)

HttpClient(http核心逻辑)

HttpPack(http数据包)

BlockQueue(多线程队列)

Encry(加密)

BaseController(单例)

Poolable(对象池之可缓存对象)

PoolManager(对象池管理器)



使用示例

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;
usi
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值