这里的初学者试图从低层次了解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的工作方式。我正在尝试创建自己的实现,但是对解析发送的数据帧的逻辑感到非常困惑...
我知道它看起来像是一个普通的AND比较,但是它是一个布尔AND比较。