V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
guonaihong
V2EX  ›  程序员

流式 http client 关注度不高,朋友们帮提提建议

  •  
  •   guonaihong ·
    guonaihong · Dec 10, 2019 · 4580 views
    This topic created in 2334 days ago, the information mentioned may be changed or developed.

    疑惑

    下面聊的是 gout,gout 是 go 里面第一个流式 http client。下面是 feaute 列表,数据编解码这块基本做到极致,引入流式概念,既可以 core 很小巧,组合起来也很强大(benchmark 是第一个 filter 函数)。为啥关注度不高?还有哪些需要完善的地方?

    feature

    • 支持 GET/PUT/DELETE/PATH/HEAD/OPTIONS
    • 支持设置请求 http header(可传 struct,map,array,slice 等类型)
    • 支持设置 URL query(可传 struct,map,array,slice,string 等类型)
    • 支持设置 json,xml,yaml 编码到请求 body 里面(SetJSON/SetXML/SetYAML)
    • 支持设置 form-data(可传 struct,map,array,slice 等类型)
    • 支持设置 x-www-form-urlencoded(可传 struct,map,array,slice 等类型) 支持 io.Reader,uint/uint8/uint16...int/int8...string...[]byte...float32,float64 至请求 body 里面
    • 支持解析响应 body 里面的 json,xml,yaml 至结构体里(BindJSON/BindXML/BindYAML)
    • 支持解析响应 body 的内容至 io.Writer, uint/uint8...int/int8...string...[]byte...float32,float64
    • 支持解析响应 header 至结构体里
    • 支持接口性能 benchmark,可控制压测一定次数还是时间,可控制压测频率
    • 等等更多

    项目地址

    https://github.com/guonaihong/gout

    演示

    gout-example.gif

    27 replies    2019-12-17 22:14:42 +08:00
    wa8n
        1
    wa8n  
       Dec 10, 2019   ❤️ 1
    多在 v2 发帖子
    zunceng
        2
    zunceng  
       Dec 10, 2019   ❤️ 1
    集成 grpc ?
    popbones
        3
    popbones  
       Dec 10, 2019 via iPhone   ❤️ 1
    文档改成英文的
    reus
        4
    reus  
       Dec 10, 2019 via Android   ❤️ 1
    你解决的根本不是痛点,没有
    shunia
        5
    shunia  
       Dec 10, 2019   ❤️ 1
    优秀的英文文档呗,想热得靠 pr,国人 pr 的热情太低。
    guonaihong
        6
    guonaihong  
    OP
       Dec 10, 2019
    @popbones 这个版本加上。
    guonaihong
        7
    guonaihong  
    OP
       Dec 10, 2019
    @reus 哈哈,你的回答最有意思,上次看你怼过几个项目,有的最后 700star,有的 1w   star。
    lishunan246
        8
    lishunan246  
       Dec 10, 2019
    给一个不用 net/http 和 valyala/fasthttp 的理由?
    chennqqi
        9
    chennqqi  
       Dec 10, 2019
    net/http 足够好了,另外不知道你说的流式是啥意思
    zhaogaz
        10
    zhaogaz  
       Dec 10, 2019
    哎,有很多 star 高的项目都是垃圾。。。
    guonaihong
        11
    guonaihong  
    OP
       Dec 10, 2019
    @lishunan246 用标准库可以慢慢的做一件事,用库可以更爽更快的做一件事。这个看个人喜好了。
    guonaihong
        12
    guonaihong  
    OP
       Dec 10, 2019
    @zhaogaz 这个没法回答你。做开源项目的人都不喜欢评论别人的开源项目是垃圾,知道几千几万行的撸不容易。如果遇到问题一般直接提 pr 帮原作者完善下。
    gesse
        13
    gesse  
       Dec 10, 2019   ❤️ 1
    star + watch 了
    stanlry
        14
    stanlry  
       Dec 10, 2019 via Android
    建议看看 go-resty,很早就有了
    PiersSoCool
        15
    PiersSoCool  
       Dec 10, 2019
    流式调用的好处在哪里?更可读?更简洁?我的确没觉得更爽,net/http 代码可读性肯定比你这好一些,因为他没有封装流式的方法,这对于业务来说是无关的代码。
    所以那解决了 net/http 什么问题?我不知道。所以对标的是什么库,优缺点呢?
    生产环境可使用吗?崩溃了谁能去及时解决?没人想给自己造成麻烦。
    我怎么从 net/http 迁移?全部重写?那是不可能的。
    python
        16
    python  
       Dec 10, 2019 via Android   ❤️ 1
    支持批量传 url slice 去请求拿响应结果不?
    错误处理呢?
    重试机制有吗?
    相比 fasthttp 性能如何?
    畸形页面的编码问题? gbk ?
    guonaihong
        17
    guonaihong  
    OP
       Dec 10, 2019
    @PiersSoCool 我下班后回答下,都是挺好的问题。
    guonaihong
        18
    guonaihong  
    OP
       Dec 10, 2019
    @python 我下班后回答,不错的建议。
    exceptionplayer1
        19
    exceptionplayer1  
       Dec 10, 2019
    不错,学习一下
    woostundy
        20
    woostundy  
       Dec 10, 2019
    支持。
    我觉得需要个最佳实践项目,来告诉大家用这个库的场景。
    matepi
        21
    matepi  
       Dec 10, 2019
    主要还是流式调试起来反人类……自己小玩玩可以,大逻辑项目不敢上
    lishunan246
        22
    lishunan246  
       Dec 10, 2019 via Android
    @guonaihong 在什么场景下你的 gout 比标准库和 fasthttp 更爽更快?
    guonaihong
        23
    guonaihong  
    OP
       Dec 10, 2019
    @stanlry gout 实现的代码现在已经比 go-resty 多,很多功能 gout 有,go-resty 没有,全面超越还是有可能的。go-resty 的立意还是很不错的,不是 python 的 request 的搬砖项目。可惜作者没有好好设计。
    guonaihong
        24
    guonaihong  
    OP
       Dec 10, 2019
    @lishunan246 抱歉,我上面说的快是开发效率。这点应该没有争议。
    标准库里面的 net/http 至今也没有项目可以撼动其地位。fasthttp 支持 http2 还没成功,作者已经去玩时序数据库了。。。
    guonaihong
        25
    guonaihong  
    OP
       Dec 10, 2019
    @PiersSoCool 这里面的问题其实很好回答,我讲下自己的事情,以前我们 http server 都是基于标准库的,后面尝试 gin 确实可以提高开发效率就慢慢铺开,在用的过程就提提 pr 优化下。用标准库开发绝对问题,但是开发效率不是最优解。这需要你那么自己权衡。这对于选择任何开源项目都适用。
    guonaihong
        26
    guonaihong  
    OP
       Dec 10, 2019
    @PiersSoCool 忽略上一条,看这条。这里面的问题其实很好回答,我讲下自己的事情,以前我们 http server 都是基于标准库的,后面尝试 gin 确实可以提高开发效率就慢慢铺开,在用的过程就提提 pr 优化下。用标准库开发绝对很难遇到问题,但是开发效率不是最优解。这需要你那么自己权衡。这对于选择任何开源项目都适用。
    guonaihong
        27
    guonaihong  
    OP
       Dec 10, 2019
    @python 字符编码不会做,这个点能不到极致,就给更喜欢这点的童鞋做。gout 只做作者能轻松 hold 得住的点,有问题可以快速解决,保守估计再撸 2-3w 行代码还是可以驾驭得住的。

    批量 url 和重试我一直不想加。重试在我遇到的项目里面没有 fast fail 策略来的好使。有兴趣的话,可以在 gout 的 issue 上面一起讨论下。
    guonaihong
        28
    guonaihong  
    OP
       Dec 17, 2019
    @python 带指数回退的 重试功能已加
    https://github.com/guonaihong/gout#retry
    欢迎试用。至于你提的别的一些功能,在未来在版本也可能实现
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2393 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 181ms · UTC 11:41 · PVG 19:41 · LAX 04:41 · JFK 07:41
    ♥ Do have faith in what you're doing.