swoole的全局變量共享范圍


在事件onstart/onworkstart之前定義的全局變量是共享的,之后的事件因為多進程的原因並不保證可共享。

但不一定共享全局變量就好,比如mysql或redis就不適合共用一個連接。

 

websocket的全局變量共享

socket的事件是共享的,但onRequest事件不共享。

 

是否可以共用1個redis或mysql連接

絕對不可以。必須每個進程單獨創建RedisMySQLPDO連接,其他的存儲客戶端同樣也是如此。原因是如果共用1個連接,那么返回的結果無法保證被哪個進程處理。持有連接的進程理論上都可以對這個連接進行讀寫,這樣數據就發生錯亂了。

所以在多個進程之間,一定不能共用連接

  • swoole_server中,應當在onWorkerStart中創建連接對象
  • swoole_process中,應當在swoole_process->start后,子進程的回調函數中創建連接對象
  • 本頁面所述信息對使用pcntl_fork的程序同樣有效

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM