Go 怎么实现 http 请求读到一定的字节数之后立刻返回?

2019-06-21 20:07:51 +08:00
 EthanDon

我在网上冲浪两天了也没发现方法

3164 次点击
所在节点    程序员
34 条回复
loading
2019-06-21 20:55:39 +08:00
我给你浪了 10 分钟:
aHR0cHM6Ly9jb2xvYnUuY29tLzIwMTYvMDcvMDEvdGhlLWNvbXBsZXRlLWd1aWRlLXRvLWdvbGFuZy1uZXQtaHR0cC10aW1lb3V0cy8=

如何切断一个 http,都是在基础包的代码里面。

如果你说的是 request,你应该知道如何浪出来吧。
gamexg
2019-06-21 20:56:48 +08:00
?
http 标准库的 body 本身是流式实现,你需要多长的 body 就读取多长,读够后直接关闭即可。

另外 http.Client 带超时控制,可能是你想要的。

如果需要更底层的控制,可以自己建立 tcp 连接,然后 http.NewRequest 后直接 Write 到自己的 tcp 连接。读取时使用 http.ReadResponse 读取即可。http.ReadResponse 接收的是 bufio.Reader,意味着你可以用 io.LimitReader 封装 tcp 连接实现限制尺寸。
gamexg
2019-06-21 20:57:43 +08:00
@gamexg #22 htt.Get 等函数只要接收到 http 响应头即可返回 ,body 等内容是你从 Body 读取时才从 tcp 连接读取的。
Leigg
2019-06-21 21:05:32 +08:00
数据分段传啊
guonaihong
2019-06-21 21:10:19 +08:00
@EthanDon 这是 gin 里面 limit 模块代码, 可以参考下。https://github.com/gin-contrib/size

本来准备写一个的,发现有现成的。
Vegetable
2019-06-21 21:38:11 +08:00
@EthanDon 傻了都,这不就是 nginx 的 413 吗?参照这个逻辑设计肯定行得通的.
flynaj
2019-06-22 09:22:05 +08:00
HTTP 协议不成的话,你可以 socket 编程。自己处理数据包,只是工程有点大。
EthanDon
2019-06-24 11:16:46 +08:00
@guonaihong 周末去浪浪,我这就去了解一下
EthanDon
2019-06-24 11:18:30 +08:00
@Vegetable 主要是不能用 nginx。。。自己造轮子的话对 go 还不太熟悉。。。
EthanDon
2019-06-24 11:25:20 +08:00
@gamexg 啊明白了,我以为哪个 response 是读完才返回的,可以结贴了!感谢大佬
EthanDon
2019-06-24 11:26:06 +08:00
@guonaihong 我去康康
@flynaj 感谢各位,结贴了
EthanDon
2019-06-24 11:26:39 +08:00
@loading 找到了解决方法,感谢
EthanDon
2019-06-24 11:27:12 +08:00
@loading 大佬浪的姿势比我好啊,请问一哈关键字和引擎是啥,我搜的都不知道是啥玩意
loading
2019-06-24 12:22:35 +08:00
@EthanDon golang 的网络基础库,虽然我还没开始看,到时我知道请求能断,所以我搜索了几个关键字。
golang net 断 关 这些,用 google。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/576288

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX