推荐 Java http 发包框架

249 天前
 loyan666
佬,java 有没有符合以下需求的 http 发包框架,
1 不要有连接池管理(不要用线程池发包,直接用调用线程发包)。
[有这个需求原因,是因为:爬虫每一个请求都要单独设置一个 Socks5 代理,目前用的 okhttp ,设置了共享连接池和最大 dispatch ,任然有很奇怪的问题,哪怕是小小 300 并发请求,都会出现大量超时、connect reset 、以及其他奇奇怪怪错误,导致成功发包率很低,300 包基本只有 50%能发出去,其他都是各种原因失败]
2 支持 http2.0 。
3 可以设置 socks5 、http 代理。
3379 次点击
所在节点    Java
39 条回复
cnhongwei
249 天前
用 spring boot 3.0 自带的 WebClient 试试,这个是 reactive 的,理论上吞吐量应比连接池好一些。
loyan666
249 天前
@cnhongwei 感谢大佬深夜指点~~
刚了解了下,WebClient 依然内嵌线程池,不太适合爬虫需求......
爬虫是一个请求一个代理,他的线程池和通道复用,只是累赘......
Huelse
249 天前
iseki
248 天前
socks 代理和线程池有什么关系
iseki
248 天前
哦,连接池啊
selca
248 天前
netty 或者 async-http-client
这俩应该都支持这些
loyan666
248 天前
@Huelse 非常感谢佬佬推荐。
大概了解了下,这东西似乎是完全异步方式,
因为要暴露接口供其他应用调用,得使用同步 http 框架,响应式不太满足需求...........
loyan666
248 天前
@iseki 是滴是滴,我表述有问题........
loyan666
248 天前
@selca netty 底层支持灵活是灵活,就是有点难用,啊哈哈。
感谢佬佬推荐,netty 作为最后底线方案..........
kuituosi
248 天前
自己写一个完全没有难度啊·,op 如果出得起价格资深架构师可以提供优质服务
loyan666
248 天前
@kuituosi 对于我有难度.......嘤嘤嘤..........还是找现成轮子好些
selca
248 天前
@loyan666 #9 实际上也没那么难用,eventloop 一启动,开 channel 就完事
bringyou
248 天前
可以试试 Java11 自带的全新 HttpClient
timethinker
248 天前
你每一次请求都是创建一个新的 TCP 链接,链接之间也不是复用的,哪里来的“连接池”的说法呢,使用线程池只是为了减少频繁创建/销毁产生开销,所以使用线程池没有冲突呀。

这里也不存在某一个链接绑定到某一个线程环境(比如你说的 socks5 代理),下一个链接用这个线程就会有问题的说法吧,这里的 socks5 应该是绑定到每一个请求上面去的,而不是线程上面。
chendy
248 天前
http 客户端哪来的连接池,最多 keep alive 一下吧
其他包不熟悉,http client 的请求完事之后可以 close 掉,按说是直接关闭连接了
其他包应该也有相关的配置
letitbesqzr
248 天前
@chendy #15 okhttp 默认配置下,的确会使用连接池
fzdwx
248 天前
`哪怕是小小 300 并发请求,都会出现大量超时、connect reset 、以及其他奇奇怪怪错误,导致成功发包率很低`

那你这有没有想过是对方服务器的问题?
monkeyWie
248 天前
建议直接用 go
kingfalse
248 天前
jsoup ,请求解析一条龙,我也是爬虫。
Goooooos
248 天前
第一个问题没看出来跟连接池有什么关系

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

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

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

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

© 2021 V2EX