鍍金池/ 問答/Java  PHP/ 請教下關(guān)于php異步編程的問題

請教下關(guān)于php異步編程的問題

首先我是遇到一個場景問題想解決,我并不是確定是不是線程能解決.. 因為對這方面理解不深。希望大牛指教。
我的問題是:
現(xiàn)在我們要對外提供一個API,是用戶上傳一段語音文件,API經(jīng)過處理返回幾組語音文件中包含的關(guān)鍵詞,也可以說是知識點、標(biāo)簽之類的。
API內(nèi)部是拿到語音文件的二進(jìn)制數(shù)據(jù)后,去調(diào)用百度的語音識別公共API服務(wù)轉(zhuǎn)化為文本,然后拿文本去調(diào)我們自己做的一個文本識別標(biāo)簽的內(nèi)部服務(wù),最后輸出給調(diào)用方的就是一些標(biāo)簽信息了。

因為是阿里云服務(wù)器,官方說是不限制上行帶寬,但是我們內(nèi)部去請求百度語音API時,是出流量的,比如只買了固定10M。

這樣當(dāng)并發(fā)量上來時,服務(wù)器往百度上出的流量就相當(dāng)驚人了,雖然我們目前只是60S內(nèi)的短語音文件...

這塊的資源瓶頸我的理解是:

1.帶寬不夠,是否換成按量付費帶寬就可以永久解決呢?
2.I/O是否也有瓶頸?我對操作系統(tǒng)原理不甚了解...(目前正在嘗試啃計算機基礎(chǔ)...)
3.其它比如CPU,內(nèi)存資源是否也會有問題?

之前有大神指點說可以換成異步通知回調(diào),自己控制并發(fā)流量。不過我們還是想實時的給用戶返回結(jié)果,考慮到用戶的場景不是很適合去主動查詢等待結(jié)果。

回到線程這個點上,我其實想大概實現(xiàn)的是:這個請求能不能不要一直占著一個進(jìn)程?當(dāng)我去請求百度時,這個進(jìn)程可否掛起睡眠不占用資源,當(dāng)百度有返回結(jié)果時,激活這個進(jìn)程繼續(xù)工作。而且百度的API也是有異步回調(diào)模式的,假如我也不是在線等待百度的處理結(jié)果,而是異步接受到通知然后繼續(xù)開啟之前的進(jìn)程繼續(xù)工作,就更好了。

之前看過一些關(guān)于并發(fā)的內(nèi)容,了解到有一個Swoole:面向生產(chǎn)環(huán)境的 PHP 異步網(wǎng)絡(luò)通信引擎。聽起來有點意思,不過不知道我這個場景到底適不適合,能不能解決最終問題。

可能我描述的槽點很多,還請見諒...

還請大牛們指點下方向,多謝!

回答
編輯回答
柒槿年

你的目的其實就是削峰。削峰,可以用隊列。簡單理解就好比大壩,外部并發(fā)量是不可控的,但是大壩可以將外部的水流量轉(zhuǎn)變?yōu)榭煽氐乃髁浚ㄩ_閘),以不至于下游沖垮!

2018年7月29日 03:48