volo icon indicating copy to clipboard operation
volo copied to clipboard

volo-grpc stream怎么监听客户端断开事件,我想客户端断开后做一些后续清理工作

Open jqiris opened this issue 1 year ago • 5 comments

Feature Request

Crates

Motivation

Proposal

Alternatives

jqiris avatar Jul 06 '24 14:07 jqiris

是指在 server 端监听连接的断开吗?这个目前还不支持

Millione avatar Jul 10 '24 11:07 Millione

是的哦,不然我stream长连接的数据是客户端主动断开的不好清除,积累多了会出大问题的,麻烦尽快支持下呢

jqiris avatar Jul 11 '24 06:07 jqiris

断开了这边的stream应该就会返回错误?在那个时候清理数据?现在 volo-grpc 里获取到连接后是丢给 hyper 去管理的,可能不太好支持

Millione avatar Jul 12 '24 05:07 Millione

给个返回错误处理的样例可以吗,或者能提供给断开的监听事件,不然信息不及时处理,内存爆了,再快也没用哈

jqiris avatar Jul 13 '24 14:07 jqiris

给个返回错误处理的样例可以吗,或者能提供给断开的监听事件,不然信息不及时处理,内存爆了,再快也没用哈

比如双向streaming的时候,server端在取request取到None的时候就代表这条stream finish了 https://github.com/cloudwego/volo/blob/main/examples/src/grpc/streaming/server.rs#L82

Millione avatar Jul 24 '24 04:07 Millione

主动断开是这个错误DEBUG volo_grpc::server: [VOLO] connection error: hyper::Error(Io, Kind(ConnectionReset)),不是正常finish @Millione

jqiris avatar Oct 30 '24 06:10 jqiris

我不太了解 grpc 这边的实现,不过我觉得可以自己实现一个 wrapper,把原有的 stream 套在里面,然后给自己的结构体实现 Drop

yukiiiteru avatar Oct 30 '24 13:10 yukiiiteru

我觉得应该添加服务事件处理器 @yukiiiteru

jqiris avatar Oct 31 '24 02:10 jqiris

我理解连接主动断开后,连接上的 Stream 都会被 drop,如 @yukiiiteru 所说,在那个时候清理就好了?

Millione avatar Nov 01 '24 13:11 Millione

我也理解不了,你们为啥不自己试试,你之前说的方法,压根不管用呢,好像区分不了正常和异常情况 @Millione

jqiris avatar Nov 05 '24 06:11 jqiris

我也理解不了,你们为啥不自己试试,你之前说的方法,压根不管用呢,好像区分不了正常和异常情况 @Millione

能提供一下你这个使用场景的最小示例吗,我再具体试试

Millione avatar Nov 08 '24 07:11 Millione

给到一种解决办法,定时检查下stream发送端是不是关闭就可以达到这个目的了

jqiris avatar Nov 23 '24 12:11 jqiris