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

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

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

因?yàn)槭前⒗镌品?wù)器,官方說是不限制上行帶寬,但是我們內(nèi)部去請(qǐng)求百度語音API時(shí),是出流量的,比如只買了固定10M。

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

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

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

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

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

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

可能我描述的槽點(diǎn)很多,還請(qǐng)見諒...

還請(qǐng)大牛們指點(diǎn)下方向,多謝!

回答
編輯回答
柒槿年

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

2018年7月29日 03:48