核心运行逻辑、关键方法及函数的调用流程 核心运行逻辑 上述代码实现了一个 VLESS over WebSocket 代理服务器,主要功能是将客户端通过 WebSocket 发送的 VLESS 协议数据解析并转发到目标服务器,同时将目标服务器的响应数据回传给客户端。以下是其核心运行逻辑的步骤: WebSocket 连接建立: 客户端发起 WebSocket 连接请求时,vlessOverWSHandler 函数被触发。 创建一个 WebSocketPair,包含客户端和服务器端的 WebSocket 对象,服务器端调用 accept() 接受连接。 从请求头中提取 sec-websocket-protocol 字段,用于处理可能的 Early Data(0-RTT 数据)。 数据流转换: 使用 makeReadableWebSocketStream 函数将服务器端 WebSocket 的数据转换为 ReadableStream,监听 WebSocket 的 message 事件,将接收到的数据推入流中。 当 WebSocket 关闭或出错时,流也会相应关闭或报错。 VLESS 协议解析与处理: 在 ReadableStream 的 write 方法中,处理客户端发送的数据块 (chunk)。 调用 processVlessHeader 解析 VLESS 协议头部,提取目标地址、端口、协议类型(TCP 或 UDP)等信息。 根据解析结果: 如果是 UDP 请求且端口为 53(DNS),调用 handleUDPOutBound 处理 DNS 查询。 如果是 TCP 请求,调用 handleTCPOutBound 建立到目标服务器的连接并转发数据。 TCP 数据转发: handleTCPOutBound 使用 connect 函数建立到目标服务器的 TCP 连接。 将客户端数据写入 TCP 连接,同时通过 remoteSocketToWS 将目标服务器的响应数据回传给 WebSocket 客户端。 UDP(DNS)数据转发: 对于 DNS 请求,handleUDPOutBound 将查询发送到指定的 DNS-over-HTTPS (DoH) 服务器,并将响应通过 WebSocket 回传给客户端。 关键方法及函数 以下是代码中关键的函数及其作用: vlessOverWSHandler:入口函数,负责建立 WebSocket 连接并初始化数据流。 makeReadableWebSocketStream:将 WebSocket 数据转换为 ReadableStream,支持 Early Data 处理。 processVlessHeader:解析 VLESS 协议头部,验证用户 UUID 并提取目标地址和端口。 handleTCPOutBound:处理 TCP 请求,建立到目标服务器的连接并转发数据。 remoteSocketToWS:将目标服务器的响应数据回传给 WebSocket 客户端。 handleUDPOutBound:处理 UDP(DNS)请求,向 DoH 服务器发送查询并返回结果。 checkUuidInApiResponse:通过 API 验证用户 UUID 的有效性。 调用流程 客户端发起 WebSocket 请求,触发 vlessOverWSHandler。 创建并接受 WebSocket 连接,获取 Early Data(如果存在)。 调用 makeReadableWebSocketStream 创建 ReadableStream,监听 WebSocket 数据。 在 ReadableStream 的 write 方法中: 调用 processVlessHeader 解析数据。 如果是 DNS 请求(UDP 端口 53),调用 handleUDPOutBound。 如果是 TCP 请求,调用 handleTCPOutBound。 handleTCPOutBound: 使用 connectAndWrite 建立 TCP 连接并写入客户端数据。 调用 remoteSocketToWS 将响应数据回传。 remoteSocketToWS: 监听 TCP 连接的响应数据。 通过 WebSocket 发送给客户端。 handleUDPOutBound(DNS 请求): 发送 DNS 查询到 DoH 服务器。 将响应通过 WebSocket 返回。