Files
edgetunnel/test/worker/stream-ws-test.js
2023-05-28 00:54:56 +08:00

55 lines
1.7 KiB
JavaScript

export default {
async fetch(request, env, ctx) {
const upgradeHeader = request.headers.get('Upgrade');
if (!upgradeHeader || upgradeHeader !== 'websocket') {
return new Response('not websocket', { status: 200 });
}
const webSocketPair = new WebSocketPair();
const [client, webSocket] = Object.values(webSocketPair);
webSocket.accept();
let count = 0;
const readableStream = new ReadableStream({
start(controller) {
setInterval(() => {
controller.enqueue(count);
count++;
}, 500)
},
async pull(controller) {
},
cancel() {
console.log('ReadableStream was canceled.');
},
});
const writableStream = new WritableStream({
write(chunk, controller) {
console.log(`Received data: ${chunk}`);
webSocket.send(`Received data: ${chunk}`);
if (chunk === 3) {
controller.error('eroorooororo')
return;
}
},
close() {
console.log('WritableStream was closed');
},
abort() {
console.log('WritableStream was aborted');
}
});
readableStream.pipeTo(writableStream).catch((error) => {
console.log('pipeTo error', error);
webSocket.close();
});
webSocket.addEventListener('close', () => {
console.log('close');
});
return new Response(null, {
status: 101,
webSocket: client,
});
}
};