在事件onstart/onworkstart之前定義的全局變量是共享的,之后的事件因為多進程的原因並不保證可共享。
但不一定共享全局變量就好,比如mysql或redis就不適合共用一個連接。
websocket的全局變量共享
socket的事件是共享的,但onRequest事件不共享。
是否可以共用1個redis或mysql連接
絕對不可以。必須每個進程單獨創建Redis
、MySQL
、PDO
連接,其他的存儲客戶端同樣也是如此。原因是如果共用1個連接,那么返回的結果無法保證被哪個進程處理。持有連接的進程理論上都可以對這個連接進行讀寫,這樣數據就發生錯亂了。
所以在多個進程之間,一定不能共用連接
- 在
swoole_server
中,應當在onWorkerStart
中創建連接對象 - 在
swoole_process
中,應當在swoole_process->start
后,子進程的回調函數中創建連接對象 - 本頁面所述信息對使用
pcntl_fork
的程序同樣有效