首頁  >  問答  >  主體

並發 - nginx外掛程式如何實現非阻塞的方式執行耗時操作?

問題描述:

nginx都知道效能給力的原因是建立在其非同步非阻塞的基礎上實現的,因此開發nginx插件時處理網路請求一定切記阻塞的方式執行某些耗時操作。否則會嚴重影響nginx效能...

這個問題就來了:如果我想在外掛程式中執行某些耗時操作呢?例如查詢資料庫(資料庫不支援http協議,有特殊協議)?

ps: 我可以開一個執行緒池,這些阻塞操作丟到池子裡,但是有什麼辦法可以讓目前請求處理掛起到nginx框架的事件佇列裡?當在阻塞操作的回呼函數裡在發送改變狀態,讓nginx繼續接著剛才的請求繼續處理?

感謝

phpcn_u1582phpcn_u15822683 天前432

全部回覆(1)我來回復

  • 迷茫

    迷茫2017-05-16 17:14:26

    資料庫查詢本質上就是網路通信,本質上只要你socket的read,write都是非阻塞的就沒問題。說起來容易實際做起來比較複雜。 nginx本身有一些可重複使用的機制可以實現在http上非阻塞的各種操作。然而像是tcp之類的通信,可能並沒有現成的。你要自己去寫,我感覺比較複雜,還要結合在nginx裡面。

    回覆
    0
  • 取消回覆