addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
const upgradeHeader = request.headers.get('Upgrade');
if (!upgradeHeader || upgradeHeader.toLowerCase() !== 'websocket') {
return new Response('Expected Upgrade: websocket', { status: 426 });
}
const targetUrl = 'wss://hack.chat/chat-ws';
// 创建 WebSocket 对象
const targetWs = new WebSocket(targetUrl);
// 监听目标 WebSocket 的 'open' 事件
targetWs.addEventListener('open', () => {
// 升级 HTTP 连接到 WebSocket
event.UpgradeWebSocket({
onMessage: (event) => {
if (targetWs.readyState === WebSocket.OPEN) {
targetWs.send(event.data);
}
},
onClose: () => {
targetWs.close();
},
onOpen: () => {
// 当 WebSocket 连接打开后,可以开始转发消息
},
send: (data) => {
if (targetWs.readyState === WebSocket.OPEN) {
targetWs.send(data);
}
},
close: () => {
targetWs.close();
}
});
});
// 监听目标 WebSocket 的 'message' 事件
targetWs.addEventListener('message', (event) => {
// 发送消息到客户端
event.UpgradeWebSocket.send(event.data);
});
// 监听目标 WebSocket 的 'error' 事件
targetWs.addEventListener('error', (event) => {
console.error('WebSocket error:', event);
});
// 监听目标 WebSocket 的 'close' 事件
targetWs.addEventListener('close', (event) => {
// 关闭客户端 WebSocket 连接
event.UpgradeWebSocket.close();
});
// 返回空 Response,因为我们已经升级到了 WebSocket
return new Response(null, { status: 101 });
}
这个行吗,