http-client如何解决”回调地狱“的问题

wenlei

目前是希望采用webman去实现各个微服务,各服务之前的通信采用HTTP的方式,现在遇到的困惑是,由于业务中一个api内可能会有多个http请求,而这些请求之间也有逻辑关系,实现的时候回调套回调会有好几层,如何解决这个问题呢?如果是node的话,可以用协程或者async await把异步转成同步的编码方式...

比如说一个请求中需要包含ABCD四个请求,如果用http-client的话会是这样:

function test(request $request){
    $http->get('A', function($respa) {
        $http->get('B', function($respb) {
            $http->get('C', function($respc) {
                $http->get('D', function($respd) {
                    json([$respa, $respb, $respc, $respd])
                })
            })
        })
    })
}

这样的话 如果再handle一下每层回调的请求错误逻辑,那就太复杂了

如果用CURL的话,又怕阻塞会导致性能降低

2459 2 0
2个回答

xiuwang

我觉得为了极限性能写异步代码得不偿失,代码可读性差,易出错,不好维护。如果要极限性能,直接用go吧。

我们用webman都是同步阻塞的写法,也就是传统项目写法,该用curl就用curl。如果外部调用多就多开点进程,性能也非常好。虽然没用异步,但是压测仍然比传统框架写的接口高出几倍,甚至是十几倍。最关键的是业务代码可以在webman和传统框架里复用,开发成本和维护成本大大降低。

  • evilk 2021-06-01

    一般来说,前期php-fpm,中期swoole or workerman,后期go,然而,一般到中期,就已经很不错了

  • forgaoqiang 2021-06-10

    从PHP到Go的迁移成本可不低,不到一定规模或者时期 应该没办法换技术栈

小阳光

Promise或许能解救你

  • 暂无评论
年代过于久远,无法发表回答
×
🔝