nginx都知道效能給力的原因是建立在其非同步非阻塞的基礎(chǔ)上實(shí)現(xiàn)的,因此開發(fā)nginx插件時(shí)處理網(wǎng)路請(qǐng)求一定切記阻塞的方式執(zhí)行某些耗時(shí)操作。否則會(huì)嚴(yán)重影響nginx效能...
這個(gè)問(wèn)題就來(lái)了:如果我想在外掛程式中執(zhí)行某些耗時(shí)操作呢?例如查詢資料庫(kù)(資料庫(kù)不支援http協(xié)議,有特殊協(xié)議)?
ps: 我可以開一個(gè)執(zhí)行緒池,這些阻塞操作丟到池子裡,但是有什麼辦法可以讓目前請(qǐng)求處理掛起到nginx框架的事件佇列裡?當(dāng)在阻塞操作的回呼函數(shù)裡在發(fā)送改變狀態(tài),讓nginx繼續(xù)接著剛才的請(qǐng)求繼續(xù)處理?
感謝
資料庫(kù)查詢本質(zhì)上就是網(wǎng)路通信,本質(zhì)上只要你socket的read,write都是非阻塞的就沒(méi)問(wèn)題。說(shuō)起來(lái)容易實(shí)際做起來(lái)比較複雜。 nginx本身有一些可重複使用的機(jī)制可以實(shí)現(xiàn)在http上非阻塞的各種操作。然而像是tcp之類的通信,可能並沒(méi)有現(xiàn)成的。你要自己去寫,我感覺(jué)比較複雜,還要結(jié)合在nginx裡面。