nginx都知道性能給力的原因是建立在其異步非阻塞的基礎(chǔ)上實現(xiàn)的,因此開發(fā)nginx插件時處理網(wǎng)絡(luò)請求一定切記阻塞的方式執(zhí)行某些耗時操作。否則會嚴重影響nginx性能...
這個問題就來了:如果我想在插件中執(zhí)行某些耗時操作呢?比如查詢數(shù)據(jù)庫(數(shù)據(jù)庫不支持http協(xié)議,有特殊協(xié)議)?
ps: 我可以開一個線程池,這些阻塞操作扔到池子里,但是有什么辦法可以讓當(dāng)前請求處理掛起到nginx框架的事件隊列里?當(dāng)在阻塞操作的回調(diào)函數(shù)里在發(fā)送改變狀態(tài),讓nginx繼續(xù)接著剛才的請求繼續(xù)處理?
感謝
數(shù)據(jù)庫查詢本質(zhì)上就是網(wǎng)絡(luò)通信,本質(zhì)上只要你socket的read,write都是非阻塞的就沒問題。說起來容易實際做起來比較復(fù)雜。nginx自身有一些可復(fù)用的機制可以實現(xiàn)在http上非阻塞的各種操作。然而像tcp之類的通信,可能并沒有現(xiàn)成的。你要自己去寫,我感覺比較復(fù)雜,而且還要結(jié)合在nginx里面。