登录
首页 >  Golang >  Go问答

如何在go lang中发出非阻塞http请求?

来源:stackoverflow

时间:2024-03-29 19:33:35 206浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《如何在go lang中发出非阻塞http请求?》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

这是我学习 go lang 的第二天,我正在尝试弄清楚如何发出非阻塞 http 请求。

我正在使用 gin 框架,并且我有非常简单的代码,如下所示。

func main() {
    r := gin.default()

    r.get("test", func(c *gin.context){
        request := gorequest.new()
        _, body, _ := request.get("http://tmp.com").end()
        c.json(200, body)
    })

    r.run()
}

tmp.com是本地服务器,需要0.5秒才能响应(我创建它是为了测试)

当我使用 wrk -t2 -c50 http://127.0.0.1:8080/test 在 go 服务器上进行简单的 ab 测试时,我每秒收到大约 8 个请求。

看起来请求被阻止。

我尝试将请求分离到一个函数中,然后用“go”调用它以使用协程,但这只是没有返回任何内容。

我修改后的代码是

func makeRequest(c *gin.Context) {
    request := gorequest.New()
    _, body, _ := request.Get("http://tmp.com").End()
    c.JSON(200, body)
}

func main() {
    r := gin.Default()

    r.GET("test", func(c *gin.Context){
        go makeRequest(c)
    })

    r.Run()
}

有没有一种简单的方法来发出非阻塞请求?或者在这种情况下最好的方法是什么?


解决方案


正如已经回答的,每个 HTTP 请求都在它自己的 go 例程中处理。 HTTP 非常适合请求/响应模式。如果您确实需要通过 HTTP 进行异步通信,您可以使用回调函数。不过,我建议使用基于事件的消息传递。

终于介绍完啦!小伙伴们,这篇关于《如何在go lang中发出非阻塞http请求?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>