mangosd 之 ByteBuffer
ByteBuffer是mangos进行网络打包的工具,上层应用程序可以用它将应用消息打包成一个序列,然后就可以将这个序列发送到网络上了。不仅仅是网游,只要是网络程序,肯定都需要有相似的东西,只是有些是已经被封装好了,比如http这些上层协议,把底层细节都封装好了,我们看不到而已。
ByteBuffer的特点在于,重载了<<和>>,所以打包消息的时候不用调用繁琐的打包函数,只需要类似:
ByteBuffer buf;
buf << int_a;
buf << char_b;
ByteBuffer内部采用一个vector来保存打包数据,这样就可以进行消息打包,解包的时候用>>就可以完成了。这样的方式看起来比较清晰自然,比乏味的调用打包函数要舒服。ByteBuffer对所有的基本类型都定义了重载函数,这就相当于把打包的基本部件全部备齐了,如果你要实现自己的和协议相关的上层打包函数,利用它提供的基本部件就可以自己构造了。
另外,BuyteBuffer还为vector,list和map提供了<<,>>的重载,可以直接将一个容器进行打包。
最后,有一个疑问,就是没有看到字节序的处理;我的思想里面是在ByteBuffer里面应该加入字节序的处理,比如在append里面将字节序统一转换为大端(毕竟网络是大端),然后接收方收到数据后再按照大端来解析;但是在这里没有看到字节序的处理(是不是在其他地方?),所以存在跨平台的问题,X86体系结构打出来的是小端,打包后也是小端的顺序,如果是大端机器收到了这个包,用大端的方式解析出来,就不对了(比如0x01020304被解析成了0x04030201了)。
阅读(1646) | 评论(1) | 转发(0) |