一.前言
一般Untiy中网络处理都是使用C#,但是如果使用Lua做热更新开发的话,很多逻辑需要在Lua端写,比如网络协议,会使用lua-protobuf,lua-pbc等。那么网络字节就需要在Lua端拼接好,再传给C#端。C#端只面向字节流,不处理字节流,字节流都在Lua端处理。
那么问题来了,我们拼接或解析字节数组,一般都是使用Tolua封装的ByteBuffer进行(本质上是MemoryBuffer+BinaryReader和BinaryWriter)
所以我们就需要在Lua端调用C#的ByteBuffer类,我们的网络数据收发是很频繁的,如果频繁的实例化ByteBuffer,就会大量GC,造成性能问题。当然我们可以使用对象池,避免实例化造成的GC,但是还是无法去掉lua调用C#端ByteBuffer的GC。
所以我们今天的解决方案是使用lua的API进行字节的拼接和解析字节流,避免使用C#端的ByteBuffer。
二.语法
我们通过Lua的指导手册,可以查到Lua端解析byte[]方法是:string.pack和string.unpack
下面就介绍下如何使用Lua自带的pack机制处理字节流byte[]
语法介绍:
--返回一
本文介绍了在Unity中,如何使用Lua处理网络协议时的字节流操作,避免频繁调用C#的ByteBuffer导致的性能问题。通过讲解Lua的`string.pack`和`string.unpack`语法,演示了如何在Lua端打包和解包byte[],以及展示了一个纯Lua实现的网络框架示例。
订阅专栏 解锁全文
1225

被折叠的 条评论
为什么被折叠?



