wokerman隨筆

  1. linux環境檢查是否知足workerman要求:
curl -Ss http://www.workerman.net/check.php | php 
  1. workerman依賴擴展:pcntl擴展posix擴展Event擴展或libevent擴展。Event擴展能顯著提升workerman在高併發鏈接時CPU利用率php

  2. workerman基於php命令行模式運行,所以workerman的啓動與中止有如下方式:
    ---- 啓動:linux

    • 以調試方式啓動:php server.php start
    • 以守護進程方式啓動:php server.php start -d

    ---- 中止:php server.php stop
    ---- 重啓:php server.php restart
    ---- 平滑重啓:php server.php reload
    ---- 查看狀態:php server.php status
    ---- 查看鏈接狀態:php server.php connectionsweb

  3. 不要使用exit、die出語句,這樣會致使進程退出redis

  4. 引入文件建議使用require_once或include_once數據庫

  5. 長鏈接應用必須加 心跳,不然可能由於長時間不活躍而被路由節點防火牆斷開併發

  6. 只有在on{...}回調中載入的文件平滑重啓後纔會自動更新,啓動腳本中直接載入的文件或者寫死的代碼運行reload不會自動更新(好比在腳本中require_once或include_once的文件)app

  7. 通常來講在Worker::runAll();調用前運行的代碼都是在主進程運行的,onXXX回調運行的代碼都屬於子進程。注意寫在Worker::runAll();後面的代碼永遠不會被執行。代碼:curl

require_once __DIR__ . '/Workerman/Autoloader.php'; use Workerman\Worker; // 運行在主進程 $tcp_worker = new Worker("tcp://0.0.0.0:2347"); // 賦值過程運行在主進程 $tcp_worker->onMessage = function($connection, $data) { // 這部分運行在子進程 $connection->send('hello ' . $data); }; Worker::runAll(); 
  1. 不要在主進程中初始化數據庫、memcache、redis等鏈接資源,要在onWorkerStart裏面初始化鏈接資源
  2. worker進程的id編號範圍是0~$worker->count-1,進程重啓後id編號值不變
  3. $connections屬性存儲了當前進程的全部客戶端鏈接對象,其結構爲:
    array(id=>connection, id=>connection, ...) ,能夠經過$worker->connections[$id]獲取connection對象,從而實現根據id向指定客戶端推送消息
  4. stdoutFile屬性用於將全部向終端的輸出重定向到stdoutFile指定的文件。前提是以守護進程方式運行
  5. 在使用workerman開發中若是想記錄業務日誌,可使用file_put_contentserror_log函數來實現
  6. onWorkerStart是在子進程啓動時運行的,若是開啓多個子進程($worker->count),則會運行$worker->count次
  7. onConnect事件僅表明客戶端與workerman完成了Tcp三次握手,此時客戶端還沒發來任何數據,在此事件中只能經過**$worker->getRemoteIp()**來獲取對方Ip,沒有其餘能夠鑑別客戶端的數據或者信息
  8. Worker::runAll()執行後將永久阻塞,也就是位於Worker::runAll()以後的代碼將不會被執行
相關文章
相關標籤/搜索