Здесь начинающий пытается на низком уровне понять, как работают веб-сокеты. Я пытаюсь создать свою собственную реализацию, однако я очень запутался в логике c синтаксического анализа фрейма данных, полученного с клиента => сервера.
Я знаю буфер, полученный на сервере сторона состоит из нескольких байтов, причем первые два являются основной информацией заголовка (бит fin, длина, код операции, маска и т. д. c).
Я нашел следующий код в 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
}
Какой мой главный вопрос, хотя .... КАК именно это возвращает правильные значения?
Я знаю буфер [ index] и buffer [index + 1] ссылаются на первый и второй байт, а операнд AND используется для сравнения двоичных значений каждого и вывода 1, когда оба индекса в обоих числах равны 1, в противном случае 0 .. .... но ...
Откуда приходят цифры после оператора &? пример: код операции 15, длина 127.
КАК точно использование оператора AND для обоих этих значений дает правильный результат? Это то, чего я действительно не понимаю.
Я прошу прощения, если это базовые c концепции информатики, которые я не понимаю, но если кто-нибудь там сможет объяснить мне, что именно происходит с этим кодом это было бы очень ценно.