HTTP客户端请求断开 后台如何自动终止继续执行代码

miaoxiaoye

如果客户端在请求过程中主动断开连接(例如关闭浏览器或网络中断或其它原因),服务端目前默认仍会继续执行。请问如何在 webman 中检测到客户端请求已经断开,并让后台自动终止后续代码的执行?

182 4 0
4个回答

tanhongbin

这个是停止不了的,任何语言都不能 一个请求进入内存中除了异常不会中断执行的

  • miaoxiaoye 1天前

    那要怎么监测 并抛出异常呢?

  • tanhongbin 1天前

    这个是搞不了的,http请求一次性请求 不是长连接 没办法断开的

阿沁

为什么会有这种奇葩需求

  • miaoxiaoye 1天前

    这种需求算奇葩?客户端HTTP请求断开 服务端正常逻辑不就是应该断开吗?如果有人直接同时发送100请求后断开 你服务端不断开 还在运行意义在哪里呢?

  • wangerwu 1天前

    奇葩需求没错,然后也实现不了。

  • wangerwu 1天前

    如果是防攻击应该换用其他思路。

  • tanhongbin 1天前

    这个不可能实现的 这么说吧还是对http协议不了解 看一下就懂了

胡桃

令牌机制。把Cancellation传入业务,TCP连接断开事件加上cancel,改造一下框架和业务代码的事。

https://reactphp.org/promise/#promiseinterfacecancel
https://amphp.org/amp#cancellation

可以参考C#,所有Async系统库支持传递Token,语言层面的原生支持。
https://learn.microsoft.com/zh-cn/dotnet/api/system.threading.cancellationtokensource?view=net-8.0

morris

找找有没有能监听tcp 链接断开的回调事件

  • tanhongbin 1天前

    就是知道了又能如何呢 业务执行中,除非重写 http进程 那个类而且很复杂的

  • morris 17小时前

    假如是go的话 。 监听到tcp链接断开 。 用 context 就可以调用cancel 取消后续操作 。 php 好像办不到

🔝