像Golang的主流框架基本都通过conn, _, _ = Context....Hijack()
取出连接对象,然后conn.Close()
关闭,4开头和5开头的状态码信息也不返回,Rust里的web框架怎么实现呢?
1
共 9 条评论, 1 页
像Golang的主流框架基本都通过conn, _, _ = Context....Hijack()
取出连接对象,然后conn.Close()
关闭,4开头和5开头的状态码信息也不返回,Rust里的web框架怎么实现呢?
评论区
写评论能再详细点吗大佬,tcpstream是要split后才能shutdown吗,好像没找到直接shutdown的api啊,shutdown以后链接的生命周期会立即结束吗?还有在一般中间件或句柄里怎么获得tcpstream,on_connect在框架里的执行顺序是怎样的?
--
👇
elsejj: actix-web 的话,可以看看这个机制 https://github.com/actix/actix-web/pull/1754
按照官方的示例
get_conn_info
可以得到一个TcpStream
,它有shutdown
方法actix-web 的话,可以看看这个机制 https://github.com/actix/actix-web/pull/1754
按照官方的示例
get_conn_info
可以得到一个TcpStream
,它有shutdown
方法2022/10,现在有人可以回答这个问题了吗?
初衷是拿到请求头判断恶意以后断开链接,连状态码都不返回,也不读取载荷,避免带宽恶意消耗。进一步来说,实现高性能即时动态ip黑名单,最好是tcpconnect获得ip后就直接断掉链接,连请求头都不放进缓存。不过后者在web框架里似乎没有先例,nginx等反向代理也达不到即时的效果,自己用tokio再撸一层反向代理又感觉太丑陋了。
Drop
这个是客户端的,而且似乎也是改请求头而已。
--
👇
gwy15: https://docs.rs/actix-web/3.3.2/actix_web/client/struct.ClientRequest.html#method.force_close
对就是直接断开tcp连接,force_close似乎只是在请求头提示关闭连接吧?不过这种api似乎在各个框架里都比较隐秘,python的web框架里我也没找到
--
👇
fakeshadow: 你想要的应该是直接drop或者shutdown Tcp/UnixStream. actix-web并不暴露api让你直接操作这些stream. 你可以使用ResponseBuilder::force_close来强制关闭连接
https://docs.rs/actix-web/3.3.2/actix_web/client/struct.ClientRequest.html#method.force_close
你想要的应该是直接drop或者shutdown Tcp/UnixStream. actix-web并不暴露api让你直接操作这些stream. 你可以使用ResponseBuilder::force_close来强制关闭连接
生命周期结束自动关闭 想控制关闭 就 加 括号 {.....}