@legacy_js

Как обрабатывать данные по ws если их больше 126?

В целях саморазвития, пытаюсь написать простой ws эхо сервер, через модуль ноды net. Все нормально работает если я через браузер по ws оправляю не больше 125 символов, декодирование происходить правильно и в браузере выводится то что я ему написал. Я знаю что если тело больше 125 байт, то во второй байт записывается 126, а 3 и 4 байт это длина тела( взято из статей) сама статья на С
629346b7dc968595319781.jpeg
Мой код, рукопожатие опущено
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
  ]

Помогите, уже неделю не могу разобраться(где то туплю) раньше с таким не работал
  • Вопрос задан
  • 59 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы