目前是希望采用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的话,又怕阻塞会导致性能降低
我觉得为了极限性能写异步代码得不偿失,代码可读性差,易出错,不好维护。如果要极限性能,直接用go吧。
我们用webman都是同步阻塞的写法,也就是传统项目写法,该用curl就用curl。如果外部调用多就多开点进程,性能也非常好。虽然没用异步,但是压测仍然比传统框架写的接口高出几倍,甚至是十几倍。最关键的是业务代码可以在webman和传统框架里复用,开发成本和维护成本大大降低。
一般来说,前期php-fpm,中期swoole or workerman,后期go,然而,一般到中期,就已经很不错了
从PHP到Go的迁移成本可不低,不到一定规模或者时期 应该没办法换技术栈
Promise或许能解救你