From 92a0b42fff48696b2db8e57a1a136da774fda141 Mon Sep 17 00:00:00 2001 From: zizifn <1803942+zizifn@users.noreply.github.com> Date: Thu, 19 Jan 2023 17:09:49 +0000 Subject: [PATCH] add comment --- apps/node-vless/src/main.ts | 20 ++++++++++++++++---- libs/vless-js/src/lib/vless-js.ts | 2 ++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/apps/node-vless/src/main.ts b/apps/node-vless/src/main.ts index 1a0eab0..f45710b 100644 --- a/apps/node-vless/src/main.ts +++ b/apps/node-vless/src/main.ts @@ -86,7 +86,7 @@ vlessWServer.on('connection', async function connection(ws) { new WritableStream({ async write(chunk: Buffer, controller) { if (remoteConnection) { - await wsAsyncWrite(remoteConnection, chunk); + await socketAsyncWrite(remoteConnection, chunk); // remoteConnection.write(chunk); return; } @@ -150,7 +150,7 @@ vlessWServer.on('connection', async function connection(ws) { } }, async write(chunk: Uint8Array, controller) { - ws.send(chunk); + await wsAsyncWrite(ws, chunk); }, close() { console.log( @@ -206,9 +206,21 @@ async function connect2Remote(port, host, log: Function): Promise { }); } -async function wsAsyncWrite(ws: Socket, chunk: Buffer) { +async function socketAsyncWrite(ws: Socket, chunk: Buffer) { return new Promise((resolve, reject) => { - ws.write(Buffer.from(chunk), (error) => { + ws.write(chunk, (error) => { + if (error) { + reject(error); + } else { + resolve(''); + } + }); + }); +} + +async function wsAsyncWrite(ws: WebSocket, chunk: Uint8Array) { + return new Promise((resolve, reject) => { + ws.send(chunk, (error) => { if (error) { reject(error); } else { diff --git a/libs/vless-js/src/lib/vless-js.ts b/libs/vless-js/src/lib/vless-js.ts index ba5e051..205ad01 100644 --- a/libs/vless-js/src/lib/vless-js.ts +++ b/libs/vless-js/src/lib/vless-js.ts @@ -176,6 +176,8 @@ export function makeReadableWebSocketStream( // console.log('MESSAGE', vlessBuffer); // console.log(`message is ${vlessBuffer.byteLength}`); + // this is not backpressure, but backpressure is depends on underying websocket can pasue + // https://streams.spec.whatwg.org/#example-rs-push-backpressure controller.enqueue(vlessBuffer); }); ws.addEventListener('error', (e: any) => {