赞
踩
一般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[]
语法介绍:
--返回一个打包了(即以二进制形式序列化) v1, v2 等值
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。