了解此websocket框架解析代码

问题描述 投票:1回答:1

这里的初学者试图从低层次了解websocket的工作方式。我试图创建自己的实现,但是我对解析从客户端=>服务器发送的数据帧的逻辑感到非常困惑。

我知道服务器端接收到的缓冲区由多个字节组成,前两个是主要标头信息(fin位,长度,操作码,掩码等)。

我在SO上找到了以下代码,该代码可以解析两个字节,并且从测试中可以确实返回正确的值。

let index = 0;
frame = {
    data: new Buffer(0),
    fin: (buffer[index] & 128) === 128,
    length: buffer[index + 1] & 127,
    masked: (buffer[index + 1] & 128) === 128,
    opcode: buffer[index] & 15
}

不过我的主要问题是什么。...这究竟是如何返回正确的值?

我知道buffer [index]和buffer [index + 1]分别指向第一个和第二个字节,并且使用AND操作数比较每个二进制值,并且当两个数字中的两个索引都等于1,否则为0 ......但是...

&运算符后面的数字从哪里来?例如:操作码为15,长度为127。

如何在这两个值上使用AND运算符给出正确的结果?这是我真的不明白。

我很抱歉,如果这是我不了解的基本计算机科学概念,但如果在那里有人能够向我解释此代码的确切含​​义,将不胜感激。

这里的初学者试图从低层次了解websocket的工作方式。我正在尝试创建自己的实现,但是对解析发送的数据帧的逻辑感到非常困惑...

javascript node.js websocket binary bit-manipulation
1个回答
0
投票

我知道它看起来像是一个普通的AND比较,但是它是一个布尔AND比较。

© www.soinside.com 2019 - 2024. All rights reserved.