hertz icon indicating copy to clipboard operation
hertz copied to clipboard

如何感知请求已结束?

Open ox-warrior opened this issue 2 years ago • 12 comments

比如请求中间突然断开了,而此时有一个任务正在执行(如在远程pod上执行一段命令),希望感知到这次断开,并做出对应的清理工作,我看了gin框架使用的net/http是支持该特性的:ctx.Done(), 给每个请求都创建了一个channel 但翻了下hertz以前的issue,发现你们觉得该特性会带来很大性能开销,类似场景hertz有无更好的解决思路?

ox-warrior avatar Jul 13 '23 06:07 ox-warrior

This issue has been marked as invalid question, please give more information by following the issue template. The issue will be closed in 1 days if no further activity occurs.

github-actions[bot] avatar Jul 13 '23 07:07 github-actions[bot]

本质上其实是想要一个链接断开的时候被cancel的ctx?

welkeyever avatar Jul 13 '23 11:07 welkeyever

本质上其实是想要一个链接断开的时候被cancel的ctx?

嗯嗯,只要能感知到链接断开就行

ox-warrior avatar Jul 13 '23 14:07 ox-warrior

翻了一下标准库的实现,你指的是https://github.com/golang/go/blob/master/src/net/http/server.go#L2011 这个地方的cancel吗,这个cancel比较粗暴,handler执行完毕就cancel了,而非链接关闭才执行;

目前 netpoll 网络库应该能做到真正链接断开的时候cancel上下文,不过这部分最好能够和标准网络库实现对齐。

welkeyever avatar Jul 14 '23 03:07 welkeyever

你的需求是。“当一个请求过来的时候你阻塞地调用一个函数(函数第一个参数是ctx),你希望客户端断开tcp连接的时候可以让ctx Done” 吗。 @peng19940915

xiaotushaoxia avatar Aug 02 '23 07:08 xiaotushaoxia

你的需求是。“当一个请求过来的时候你阻塞地调用一个函数(函数第一个参数是ctx),你希望客户端断开tcp连接的时候可以让ctx Done” 吗。 @peng19940915

差不多吧,核心需求是希望因为网络中断等原因导致客户端与hertz断开了,hertz要能感知到,感知到后才能做出相应的资源回收动作

ox-warrior avatar Aug 09 '23 10:08 ox-warrior

xiaotushaoxia

抱歉这么晚才回复,hertz有办法能实现嘛?目前业务上有类似场景,用户发起了一个请求,服务端调用了一个第三方程序,但有时候用户主动断开请求后,第三方程序还是在跑

ox-warrior avatar Aug 09 '23 10:08 ox-warrior

xiaotushaoxia

抱歉这么晚才回复,hertz有办法能实现嘛?目前业务上有类似场景,用户发起了一个请求,服务端调用了一个第三方程序,但有时候用户主动断开请求后,第三方程序还是在跑

我也没找到,可能要换上websocket吧 这样可以知道连接有没有断开

xiaotushaoxia avatar Aug 29 '23 08:08 xiaotushaoxia

xiaotushaoxia

抱歉这么晚才回复,hertz有办法能实现嘛?目前业务上有类似场景,用户发起了一个请求,服务端调用了一个第三方程序,但有时候用户主动断开请求后,第三方程序还是在跑

hi,@xiaotushaoxia @peng19940915 可以飞书联系聊下,如果在生产环境下使用 hertz 并且的确是真实需求的话我们可以优先支持一下。

li-jin-gou avatar Aug 29 '23 09:08 li-jin-gou

plz assign to me

chaoranz758 avatar Oct 10 '23 08:10 chaoranz758

你好,这个问题最后解决了吗,我最近也有一个这个需求,在gin中可以感知到,但是hertz就是不行

liqiaoyang-pm avatar May 11 '24 02:05 liqiaoyang-pm

你好,这个问题最后解决了吗,我最近也有一个这个需求,在gin中可以感知到,但是hertz就是不行

在这个 PR 跟进,没赶上 0.9.0 ,下周争取合入 https://github.com/cloudwego/hertz/pull/1054

li-jin-gou avatar May 11 '24 02:05 li-jin-gou