Я пытаюсь прочесть данные, которые поступают через соединение discord gateway (websocket).
Текущей конфигурацией по умолчанию для discord является URL-адрес websocket wss://gateway.discord.gg/?encoding=etf&v=6&compress=zlib-stream
.Это означает, что данные кодируются в etf и сжимаются с использованием zlib.
Я попытался автоматически распаковать и расшифровать данные, используя сборку nodejs в модуле zlib и модуль erlpack из discord.По большей части как декомпрессия, так и дешифрование работают, но иногда после декомпрессии, когда я звоню erlpack.unpack(data)
, я получаю сообщение об ошибке List doesn't end with a tail marker, but it must!
.Я не совсем уверен, почему я получаю эту ошибку, я имею в виду, что данные поступают прямо с серверов разногласий, поэтому они должны быть целыми.
Это более или менее код, который отвечает за часть декодирования / дешифрования:
let inflater = zlib.createInflate();
inflater.on("data", (uncompressedData) => {
let obj = erlpack.unpack(uncompressedData);
console.log(obj);
});
inflater.write(data);
Не знаю, поможет ли это, но вот код github для декодера erlpack .Кто-нибудь знает, как решить эту проблему или знает, что я делаю не так?