如果客户端在请求过程中主动断开连接(例如关闭浏览器或网络中断或其它原因),服务端目前默认仍会继续执行。请问如何在 webman 中检测到客户端请求已经断开,并让后台自动终止后续代码的执行?
这个是停止不了的,任何语言都不能 一个请求进入内存中除了异常不会中断执行的
那要怎么监测 并抛出异常呢?
这个是搞不了的,http请求一次性请求 不是长连接 没办法断开的
为什么会有这种奇葩需求
这种需求算奇葩?客户端HTTP请求断开 服务端正常逻辑不就是应该断开吗?如果有人直接同时发送100请求后断开 你服务端不断开 还在运行意义在哪里呢?
奇葩需求没错,然后也实现不了。
如果是防攻击应该换用其他思路。
这个不可能实现的 这么说吧还是对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
这种办法只能实现简陋的任务取消机制,因为PHP语言和框架没有原生支持,而且第三方库也基本是零支持。
或者换Swoole,需要保证得到正确的业务协程id。
https://wiki.swoole.com/zh-cn/#/coroutine/coroutine?id=cancel
找找有没有能监听tcp 链接断开的回调事件
就是知道了又能如何呢 业务执行中,除非重写 http进程 那个类而且很复杂的
假如是go的话 。 监听到tcp链接断开 。 用 context 就可以调用cancel 取消后续操作 。 php 好像办不到
这个是停止不了的,任何语言都不能 一个请求进入内存中除了异常不会中断执行的
那要怎么监测 并抛出异常呢?
这个是搞不了的,http请求一次性请求 不是长连接 没办法断开的
为什么会有这种奇葩需求
这种需求算奇葩?客户端HTTP请求断开 服务端正常逻辑不就是应该断开吗?如果有人直接同时发送100请求后断开 你服务端不断开 还在运行意义在哪里呢?
奇葩需求没错,然后也实现不了。
如果是防攻击应该换用其他思路。
这个不可能实现的 这么说吧还是对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
这种办法只能实现简陋的任务取消机制,因为PHP语言和框架没有原生支持,而且第三方库也基本是零支持。
或者换Swoole,需要保证得到正确的业务协程id。
https://wiki.swoole.com/zh-cn/#/coroutine/coroutine?id=cancel
找找有没有能监听tcp 链接断开的回调事件
就是知道了又能如何呢 业务执行中,除非重写 http进程 那个类而且很复杂的
假如是go的话 。 监听到tcp链接断开 。 用 context 就可以调用cancel 取消后续操作 。 php 好像办不到