目前是希望采用webman去實(shí)現(xiàn)各個(gè)微服務(wù),各服務(wù)之前的通信采用HTTP的方式,現(xiàn)在遇到的困惑是,由于業(yè)務(wù)中一個(gè)api內(nèi)可能會(huì)有多個(gè)http請(qǐng)求,而這些請(qǐng)求之間也有邏輯關(guān)系,實(shí)現(xiàn)的時(shí)候回調(diào)套回調(diào)會(huì)有好幾層,如何解決這個(gè)問(wèn)題呢?如果是node的話,可以用協(xié)程或者async await把異步轉(zhuǎn)成同步的編碼方式...
比如說(shuō)一個(gè)請(qǐng)求中需要包含ABCD四個(gè)請(qǐng)求,如果用http-client的話會(huì)是這樣:
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一下每層回調(diào)的請(qǐng)求錯(cuò)誤邏輯,那就太復(fù)雜了
如果用CURL的話,又怕阻塞會(huì)導(dǎo)致性能降低
我覺(jué)得為了極限性能寫(xiě)異步代碼得不償失,代碼可讀性差,易出錯(cuò),不好維護(hù)。如果要極限性能,直接用go吧。
我們用webman都是同步阻塞的寫(xiě)法,也就是傳統(tǒng)項(xiàng)目寫(xiě)法,該用curl就用curl。如果外部調(diào)用多就多開(kāi)點(diǎn)進(jìn)程,性能也非常好。雖然沒(méi)用異步,但是壓測(cè)仍然比傳統(tǒng)框架寫(xiě)的接口高出幾倍,甚至是十幾倍。最關(guān)鍵的是業(yè)務(wù)代碼可以在webman和傳統(tǒng)框架里復(fù)用,開(kāi)發(fā)成本和維護(hù)成本大大降低。