数据包大小为低延迟websocket html 5游戏
我正在做一个HTML 5的国际象棋游戏。 我用一个长度(大小)为64的无符号8位二进制数组来代表该板。由于棋盘上有64个位置。
var board = Uint8Array(64);
每个棋子通过(明显)8位无符号整数表示在棋盘上。 然后在客户端上有一张地图将一个片断的二进制表示与一个文本string相关联,例如:
var pieceMap = { 01: 'BlackKnight', 112: 'WhitePawn', 6: 'BlackRook' ... }
数据通过socket.io连接发送(让我们假设我们正在使用websockets),TCP我认为? 所以问题是: 请问TCP发送的数据包与我给它的数据一样小(有TCP开销),还是TCP有一个最小数据包大小,并发送200byte数据包作为一个1024byte数据包?
为什么这么痴迷大小? 我知道这并不重要,但我使用这个为学习experiance,在未来的比赛中,我会用这个来降低延迟…我知道国际象棋并不需要低延迟。
根据RFC的指示,将数据包作为框架:
http://tools.ietf.org/html/rfc6455#section-5
每个消息的开销最多为10个字节或更less的PER消息片段。 每个分段发送多less字节由有效载荷长度决定(部分成帧)。 尽pipe如此,碎片可能相当大。 除非你发送非常大的消息,我不认为这会是一个问题。
根据成帧和分片工作的方式,如果成帧+数据刚好在100字节左右,则不应该发送/接收1024字节的数据。
我的猜测是,有些实现可能会做些微小的改变,但是除非您的应用程序开始出现压力问题,否则您不应该担心这样的细节。
“不成熟的优化是万恶之源”Donald Knuth
另一个细节:如果你真的想要非常低的延迟,你将不得不开始考虑使用UDP或多播的东西。 问题是:websockets不支持这些。 减小数据包的大小并不是networking的重要组成部分,而只是其中的一部分…从我使用socket.io的经验来看,CPU在带宽之前成为带有小信息的瓶颈,RAM也可能会受到重创在带宽以及消息处于低千字节之前。 当然,这完全取决于你的应用,而我只是在谈论实证经验。
- 现在是否可以使用GetUserMedia API从networking摄像机读取videostream,并直接发送到服务器进行进一步的广播?
- 一个2多个audiostream,通过NodeJS或其他
- 为什么我的websocket服务器没有正确地提供我的HTML页面?
- 通过Socket.io HTML5video/audio到Nodejs,但扭曲 – FFMPEG
- getElementsByTagName不起作用
- 更高效地发送canvas的内容
- 在iOS上运行Node.js作为服务器,并让其他设备连接
- 使用nodejs和Express进行videostream
- HTML5事件源API和node.js | 如何发送stream到正确的客户端?