我正在制作一个HTML 5国际象棋游戏。我用无符号8位二进制数组代表电路板,长度(大小)为64.因为国际象棋中有64个位置。
var board = Uint8Array(64);
每个棋子通过一个(显然)8位无符号整数表示在棋盘上。然后在客户端上有一个地图,将一个部分的二进制表示与文本字符串相关联,例如:
var pieceMap = { 01: 'BlackKnight', 112: 'WhitePawn', 6: 'BlackRook' ... }
数据通过socket.io连接发送(假设我们使用的是websockets),我觉得TCP?所以问题是: TCP会将我的数据包发送到与其提供的数据一样小(带有TCP开销),还是TCP具有最小数据包大小,并将我的200byte数据包发送为1024字节数据包?
为什么这么痴迷大小?我知道这没关系,但是我用它来学习经验,在未来的游戏中我会用它来降低延迟......我知道国际象棋不需要低延迟。
答案 0 :(得分:3)
根据RFC的指示,数据包为框架
http://tools.ietf.org/html/rfc6455#section-5
每个消息的开销最多为10个字节或更少的PER消息片段。每个片段发送的字节数由有效负载长度(成帧的一部分)确定。但碎片可能相当大。除非您发送非常大的消息,否则我认为这不是问题。
根据成帧和碎片的工作方式,如果成帧+数据只有大约100个字节,则不应发送/接收1024字节的数据。
我的猜测是,某些实现可能会带来微小的差异,但除非您开始在我们的应用程序中看到压力问题,否则您不应该过多关注这样的细节。
另一个细节:如果你真的想要获得非常低的延迟,你将不得不开始研究使用UDP或多播等事情。问题是:websockets不支持这些。减少数据包大小并不是网络唯一重要的事情,但只是其中的一部分......根据我对socket.io的经验,CPU在带宽之前成为小消息的瓶颈,RAM也可能受到重创在带宽以及消息处于低千位数时。当然,这完全取决于您的申请,我只是在谈论实证经验。