+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 站长学院 > 如何在go lang中发出非阻塞http请求? >

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

时间:2024-04-05 16:27:20

今天我给大家带来《如何在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 进行异步通信,您可以使用回调函数。不过,我建议使用基于事件的消息传递。

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

Title