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