如何检测用户取消请求

2024-01-08

我正在通过编写一个非常基本的 http/web 缓存代理来尝试 Node.js,并且遇到了一些我尚未突破的问题。

假设我有一个非常基本的代理功能(侦听请求,将其传送到外部服务器,等待响应,将其传送回客户端),我如何检测客户端(Web 浏览器)何时取消请求?当用户在浏览器上单击“停止”/Esc 时,浏览器不会向我发送任何“请求”或信息,并且不会调用“响应”连接结束时附加的回调。

这就是我的意思:

http.createServer (clientRequest, clientResponse) {  
    var client = http.createClient (port, hostname);
    var request = client.request (method, url, headers);  

    request.addListener ('response', function(response){  
        response.addListener ('data', function(chunk){  
           // forward data to clientResponse..
        }  
        response.addListener ('end', function(){   
           // end clientResponse..  
        }  
    });  
    clientResponse.addListener('end', function(){  
        // this never gets called :(
        // I want it to terminate the request/response created just above  
    }
}

事实证明,我应该绑定到请求的“关闭”事件而不是“结束”事件。 这确实有道理。
我在这里发布此内容是为了其他可能遇到同样问题的人:

clientResponse.addListener('close', function(){  
    // this gets called when the user terminates his request  
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测用户取消请求 的相关文章

随机推荐

  • 如何在rails中的text_area_tag中插入占位符文本?

    我正在使用以下代码来生成textarea tag 渲染后 它会生成以下 HTML
  • Excel 文件 - 它已被其他用户以独占方式打开,

    我正在使用 C 读取 excel 文件 下面是按预期工作的代码 除了每次运行应用程序时 我都必须关闭 excel 文件 否则我会收到以下错误消息 The Microsoft Access database engine cannot ope
  • 在 Cocoa Touch 中以编程方式切换视图

    如何在 iPhone 应用程序中以编程方式更改屏幕视图 我已经能够创建导航视图并以编程方式推送 弹出它们以产生此行为 但如果我想简单地更改当前视图 不使用 UINavigation 控制器对象 那么实现此目的的最简洁方法是什么 一个简单的示
  • 如何让函数 [a] -> [a] 对 [(a,Int)] 进行操作?

    我发现自己经常按照以下模式编写代码 foo xs map snd filter lt 10 fst zip xs 0 bar ys map snd sortBy compare on fst zip ys 0 现在我想把它抽象出来 foo
  • Kubernetes:如何获取运行超过 3 天的命名空间?

    示例 我想获取所有运行超过 3 天的命名空间 我已经借助此命令按标签和创建时间戳对命名空间进行了排序 kubectl get 命名空间 l Provisioner foo sort by metadata creationTimestamp
  • 如何在不同的命名空间上使用 nginx 入口 TCP 服务[重复]

    这个问题在这里已经有答案了 我在 kubernetes 集群中部署了两个命名空间 命名空间 A 主机 mysql 和命名空间 B 运行 postgress 并在这些端口上公开其服务部署 Namespace A mysql port 3306
  • JScrollPane 垂直滚动条太宽

    我正在使用 Netbeans GUI Builder 创建 GUI 应用程序 因此生成的所有代码都是由 Netbeans 生成的 预览设计中的一切看起来都很好 但是当我运行应用程序时 JScrollPane 显示得很糟糕 如您所见 只有一半
  • 在VB6中将十六进制值转换为十进制值

    在VB6中如何将十六进制值转换为十进制值 我只是想看看这是否有效 Dim hexVal as string hexVal 7B19AB clng H hexVal 然而 我得到 类型不匹配 error 去掉 号 Dim hexVal as
  • CSS 中的美女图标形状

    如何仅在 CSS 中绘制此 Belle 图标形状 我已经尝试过方形元素上的边框半径 但没有得到确切的角 那么 为了达到准确的效果 即使我们使用百分比 我们也不能依赖单个元素border radius 因此 一种选择可能是使用两个彼此重叠的
  • D3 js图中相同颜色的箭头和链接

    我是 D3 的新手 一直在尝试使箭头的颜色与 D3 图中箭头的颜色相同 参考给出的代码解决方案here https stackoverflow com questions 32964457 match arrowhead color to
  • OpenAI API:尽管 GPT-3.5 模型可以工作,但为什么我无法通过 API 访问 GPT-4 模型?

    我可以使用 gpt 3 5 turbo 0301 模型访问 ChatGPT API 但不能使用任何 gpt 4 模型 这是我用来测试这个的代码 它不包括我的 openai API 密钥 代码按编写的方式运行 但是当我用 gpt 4 gpt
  • 如何与 Web XML/JSON API 交互?

    我正在自己学习 php xml json 和其他所有内容 并且我正在通过 API 来完成某些事情 他们有文档 但我仍然不明白 API 是如何工作的 他们给你一个 GET 链接和 API 密钥 我知道你应该将 API 密钥放在请求链接中 我如
  • 在 JetBrains PyCharm 中禁用 SQL 检测

    我试图输入以下行 self label QtGui QLabel Select parameter from selected category PyCharm 认为我正在执行 SQL 查询或其他操作 并给出了有关未配置数据连接的错误 字符
  • (非原子、强)属性的生命周期在 iOS 中如何运作?

    假设我有一个属性声明为 property nonatomic strong NSArray menuArr OR property strong NSArray menuArr 并将此属性设置为viewDidLoad 设备会 记住 我存储在
  • iOS 版 Meteor 1.3+ 帐户 Facebook 登录无法正常工作

    我一直在尝试找到一个解决方案 遗憾的是现在已经 3 个月了 在 iOS 上使用 Meteors Accounts Facebook 登录 Facebook 我几乎尝试了 Google 搜索所能找到的所有内容 接触了 Meteor 论坛 甚至
  • 数组指针的大小

    如果我有一个这样声明的数组 int a 3 2 那么为什么是 sizeof a 0 8 whereas sizeof a 24 我不明白向指针添加 0 如何改变sizeof输出 是否可能有一些隐式类型转换 如果你添加0 to a then
  • 如何让我的应用程序运行时间超过 10 分钟。在后台?

    我知道在iOS中 后台应用程序只能运行 有限长度任务 10 分钟 位置更新 VoIP Audio 有没有办法让我的应用程序避免在 10 分钟后被终止 在后台 我不会将我的应用程序提交到应用程序商店 因此一切都是允许的 私有框架 即使我不需要
  • Vue&TypeScript:在项目目录之外的 TypeScript 组件中实现导入时如何避免错误 TS2345?

    当尝试使用侧面组件 在项目目录之外 时 我遇到了以下 TypeScript 错误 TS2345 Argument of type template string components SimpleCheckbox typeof Simple
  • 从 Sonarqube 导出编码规则列表

    我正在尝试找到一种方法来获取所有 Sonarqube Java 或其他 规则 带有键 描述等 的列表 并将其导出为 Excel csv 或 xml 我可以 动态 地列出它们 例如this http nemo sonarqube org co
  • 如何检测用户取消请求

    我正在通过编写一个非常基本的 http web 缓存代理来尝试 Node js 并且遇到了一些我尚未突破的问题 假设我有一个非常基本的代理功能 侦听请求 将其传送到外部服务器 等待响应 将其传送回客户端 我如何检测客户端 Web 浏览器 何