You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Deno中检测远程端已关闭(中止)TCP/IP(HTTP)连接?

在Deno中检测远程TCP/HTTP连接关闭的替代方案

你尝试使用的conn.on('abort')事件API在Deno中并不存在,要检测远程连接是否关闭,需要通过捕获异步操作的错误或判断读取结果来实现,以下是两种可行方案:

1. HTTP场景下的连接关闭检测

在处理HTTP请求的流程中,当远程连接关闭时,读取请求体、发送响应或遍历httpConn迭代器的操作会抛出特定错误,通过捕获这些错误即可感知连接状态:

const server = Deno.listen({ port: 8080 });

for await (const conn of server) {
  // 用自执行异步函数处理单个连接,避免阻塞迭代
  (async () => {
    const httpConn = Deno.serveHttp(conn);
    try {
      for await (const requestEvent of httpConn) {
        try {
          // 读取请求体,连接关闭时会触发错误
          await requestEvent.request.text();
          // 尝试发送响应,连接断开时也会抛出错误
          await requestEvent.respondWith(new Response("OK", { status: 200 }));
        } catch (err) {
          // 匹配连接关闭相关的错误类型
          if (err instanceof Deno.errors.BrokenPipe || err instanceof Deno.errors.ConnectionReset) {
            console.log("远程HTTP连接已关闭");
            // 在这里执行连接关闭后的清理逻辑
          }
        }
      }
    } catch (err) {
      if (err instanceof Deno.errors.ConnectionReset) {
        console.log("HTTP连接被远程重置");
      }
    } finally {
      conn.close();
    }
  })();
}

2. 纯TCP场景下的连接关闭检测

如果是直接处理TCP连接,可通过循环读取连接数据来判断:当连接正常关闭时,conn.read()会返回null;异常关闭时则会抛出ConnectionReset错误:

const server = Deno.listen({ port: 8080 });

for await (const conn of server) {
  (async () => {
    const buf = new Uint8Array(1024);
    try {
      while (true) {
        const readSize = await conn.read(buf);
        if (readSize === null) {
          console.log("远程TCP连接已正常关闭");
          break;
        }
        // 处理读取到的TCP数据
        const data = new TextDecoder().decode(buf.subarray(0, readSize));
        console.log(`收到数据: ${data}`);
      }
    } catch (err) {
      if (err instanceof Deno.errors.ConnectionReset) {
        console.log("TCP连接被远程强制断开");
      }
    } finally {
      conn.close();
    }
  })();
}

关键说明

Deno的Conn对象没有提供事件监听式的连接关闭检测API,必须通过异步I/O操作的错误捕获或读取结果判断来实现连接状态的感知,上述两种方案分别覆盖了HTTP和纯TCP的常见场景。

内容的提问来源于stack exchange,提问作者Martin Ždila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:25:26