swoole的worker程序之間如何共享資料

2021-08-27 16:31:29 字數 664 閱讀 9423

swoole的tcp連線都是以數字的方式提供給php端的,在php**中只需要儲存fd/from_id這2個數字,即可向對應的連線傳送資料。swoole本身也提供了可以遍歷所有連線的函式介面(swoole_connection_list/swoole_connection_info)。這兩個函式在eventworker/taskworker均可呼叫。

但只能儲存與網路服務相關的資料,如**埠,客戶端ip,客戶端port等資訊。swoole本身沒有提供操作共享記憶體的介面,如果業務**中希望儲存額外的資訊,或在worker程序之間共享資料,可以使用第三方的工具庫。

單機環境單應用

可以使用apc擴充套件提供的apc_store/apc_fetch/apc_delete來儲存資料。apc是使用鎖+共享記憶體實現的,效能最好。但只能用於單個swoole的伺服器例項,並且資料是非持久化的,server結束時資料會被清空。

if(pcntl_fork() > 0)

else

單機跨應用

leveldb/rocksdb或者讀寫檔案。檔案讀寫時應當加鎖,可以使用swoole提供的swoole_lock類。當然也可以直接使用分布式的儲存,如memcache/mysql/redis等。

分布式環境

使用memcache/mysql/redis/ttserver等儲存服務。

**:

master程序和worker程序

master程序為主程序,該程序會建立manager程序和reactor執行緒等工作進 執行緒 reactor執行緒實際執行epoll例項,用於接受客戶端的鏈結和發來的請求 manager程序是管理程序,該程序是為了建立管理所有的worker程序和taskworker程序,而taskworker則是...

優雅地關閉worker程序

關閉nginx兩種方式 nginx s stop 立即停止nginx程序 nginx s quit 優雅地關閉worker程序 開始優雅的關閉worker程序後 01設定定時器 worker shutdown timeout 設定多少秒後關閉連線 02關閉監聽控制代碼,不在接收新的連線 03關閉空閒...

Swoole多程序的實現

使用swoole多程序上傳檔案到網宿伺服器 created by phpstorm.user leeo date 2016 9 29 time 15 26 引入檔案上傳類include once filehandleclass.php obj fetch new filehandleclass wo...