В целях саморазвития, пытаюсь написать простой ws эхо сервер, через модуль ноды
net
. Все нормально работает если я через браузер по ws оправляю не больше 125 символов, декодирование происходить правильно и в браузере выводится то что я ему написал. Я знаю что если тело больше 125 байт, то во второй байт записывается 126, а 3 и 4 байт это длина тела( взято из статей)
сама статья на С
Мой код, рукопожатие опущено
socket.on('data', (data_buffer) => { // Buffer [129, 129, 55, 87, 111, 186, 6] от клиента
let bytes_length = data_buffer[1] - 128, // количество байт
payload_buffer = Buffer.alloc(bytes_length), // [ 0, 0, 0 ] размер буфера = количество байт полезной нагрузки
offset // смещение в зависимости от длины сообщения
if(bytes_length <= 125) {
offset = 2
} else if(bytes_length >= 126) {
data_buffer[1] = 126
data_buffer[2] = ((bytes_length >> 8) & 255) // data_buffer[2] = 0
data_buffer[3] = ((bytes_length) & 255) // data_buffer[3] = 126
offset = 4
}
let mask = Buffer.from( // маска 4 байта
[
data_buffer[offset],
data_buffer[offset + 1],
data_buffer[offset + 2],
data_buffer[offset + 3]
])
if(mask) {
offset += 4
console.log(data_buffer.toJSON());
for(let i = 0; i < bytes_length; ++i) {
payload_buffer[i] = data_buffer[offset + i] ^ mask[i % 4]
}
let msg = Buffer.concat([Buffer.from([129, bytes_length]), payload_buffer])
socket.write(msg)
}
})
Я не могу понять что нужно сделать с этими байтами длины что бы декодирование прошло правильно.
Вот что приходит с лога когда я отправляю например 126 символов
a
data: [
129, 126, 0, 126, 153, 9, 59, 91, 234, 109, 80, 49,
255, 110, 82, 96, 237, 122, 81, 50, 254, 123, 81, 40,
240, 110, 73, 62, 238, 99, 90, 60, 243, 111, 82, 52,
252, 123, 90, 51, 254, 124, 84, 41, 234, 97, 92, 46,
246, 50, 83, 41, 248, 96, 78, 52, 254, 127, 83, 49,
162, 124, 84, 41, 234, 97, 92, 45, 236, 97, 73, 58,
236, 102, 92, 45, 162, 97, 0, 41, 236, 102, 82, 63,
248, 97, 92, 45, 236, 102, 82, 41, 248, 97, 92, 46,
246, 127, 83, 41,
... 34 more items
]
Помогите, уже неделю не могу разобраться(где то туплю) раньше с таким не работал