Estoy usando el paquete ws para conectarme al socket web poloniex, usando el siguiente código:
const WS = require('ws'); const ws = new WS('wss://api2.poloniex.com'); ws.on('open', () => { ws.send(JSON.stringify({ command: 'subscribe', channel: 'USDT_BTC' })); }); ws.on('message', (msg) => { console.log(JSON.parse(msg)); ws.close(1000); }); ws.on('close', (code) => { console.log(`closing with code ${code}`); }); ws.on('error', (error) => { console.error(error); });Sin embargo, obtengo el siguiente resultado:
RangeError: Invalid WebSocket frame: MASK must be clear at Receiver.getInfo (/home/clecio/Programming/test-poloniex/node_modules/ws/lib/receiver.js:299:14) at Receiver.startLoop (/home/clecio/Programming/test-poloniex/node_modules/ws/lib/receiver.js:136:22) at Receiver._write (/home/clecio/Programming/test-poloniex/node_modules/ws/lib/receiver.js:83:10) at writeOrBuffer (internal/streams/writable.js:358:12) at Receiver.Writable.write (internal/streams/writable.js:303:10) at TLSSocket.socketOnData (/home/clecio/Programming/test-poloniex/node_modules/ws/lib/websocket.js:1116:35) at TLSSocket.emit (events.js:400:28) at addChunk (internal/streams/readable.js:293:12) at readableAddChunk (internal/streams/readable.js:267:9) at TLSSocket.Readable.push (internal/streams/readable.js:206:10) { code: 'WS_ERR_UNEXPECTED_MASK', [Symbol(status-code)]: 1002 } closing with code 1006 ¿Alguien sabe qué significa este error? Probé un código similar con servidores similares y no obtengo ningún error. Además, si no envío ningún código a la función ws.close() , no recibo ningún error. ¿Alguien sabe por qué sucede esto? Qué
Acabo de aprender esto tratando de hacer mi propia implementación de WebSocket en C#. Lo que el error significa con "MASK must be clear" es que no se espera que los datos estén enmascarados; lo que significa omitir la clave XOR y no codificar la carga útil.
Ejemplo de byte de un cuadro que envía "hola" codificado:
Mask bit set and 7-bit payload length vv {81, 82, 97, 34, 89, 6A, FF, 5D} ^^^^^^^^^^^^^^ ^^^^^^ Mask Key Encoded Payload Ejemplo de byte de un cuadro que envía "hola" sin codificar:
Tenga en cuenta que no hay clave de máscara.
Mask bit not set and 7-bit payload length v {81, 2, 68, 69} ^^^^^^ Raw Payload Dado que parece estar trabajando con una biblioteca WebSocket en JS, vería si hay un parámetro que deba configurar que esté codificando lo que está haciendo su ws.send() .