Answers:
假设...
尽量避免浪费数据包中的空间来定义结构。IE至少发送一个字节来表示数据包的类型,然后假设接收到的每个数据包都遵循该数据包类型的预定义结构
我应该将结构读入套接字吗?使用质子缓冲液/旧货吗?
我应该如何表示数据数组?
用于打包/拆包数据的界面应该是什么样?
最后一点,包大小是一个问题,特别是对于快照而言:大小= packetSize x实体x connectedPlayers; 因此,每个数据包可能有60 x 10 x 16 = 9,600字节,然后每秒发送20次:= 192,000 bps = 187 KBps。这显然是具有较高上传速度的乐队。因此,需要在可能的情况下最小化影响分组大小的每个因素。
这篇文章极大地帮助了我: Valve多人网络
此问题已由Google和Facebook解决:
Google的协议缓冲区-Google是C ++的大用户:
协议缓冲区是一种以有效但可扩展的格式对结构化数据进行编码的方法。Google几乎所有内部RPC协议和文件格式都使用协议缓冲区。
Apache Thrift(以前为Facebook):
Thrift是用于可扩展的跨语言服务开发的软件框架。它结合了软件堆栈和代码生成引擎,以构建可在C ++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,JavaScript,Node.js,Smalltalk和OCaml之间高效且无缝运行的服务。