首页 > 代码库 > workerman源码分析(一)

workerman源码分析(一)

worker类分析:

1.构造方法

/**     * Construct.     *     * @param string $socket_name     * @param array  $context_option     */    public function __construct($socket_name = ‘‘, $context_option = array())    {        // Save all worker instances.        // 在这里目的就是当前woker对象hash化,并且存放到$_workers静态数组变量中,目的就是只要一次启动服务,所有的对象都只实例化一次,并且存放在内存中        $this->workerId                  = spl_object_hash($this);        self::$_workers[$this->workerId] = $this;        self::$_pidMap[$this->workerId]  = array();        // Get autoload root path.        // debug_backtrace()这个函数使用来追踪代码执行顺序,这里就是取得启动文件名,并且设置_autoloadRootPath路径为启动文件目录        $backtrace                = debug_backtrace();        $this->_autoloadRootPath = dirname($backtrace[0][‘file‘]);        // Context for socket.        // 在这里是用来设置socket的context,可以用来设置ssl这样的加密通道        if ($socket_name) {            $this->_socketName = $socket_name;            if (!isset($context_option[‘socket‘][‘backlog‘])) {                $context_option[‘socket‘][‘backlog‘] = self::DEFAULT_BACKLOG;            }            $this->_context = stream_context_create($context_option);        }        // Set an empty onMessage callback.        // 设置一个空的回调函数        $this->onMessage = function () {        };    }

2.当启动文件new Worker()运行完构造方法之后,最后运行了类中的静态变量Worker::runAll();

/**     * Run all worker instances.     *     * @return void     */    public static function runAll()    {        self::checkSapiEnv();        self::init();        self::parseCommand();        self::daemonize();        self::initWorkers();        self::installSignal();        self::saveMasterPid();        self::forkWorkers();        self::displayUI();        self::resetStd();        self::monitorWorkers();    }

3.接下来我们就一个个进入到这些方法中,来具体看看其中的各个实现。

self::checkSapiEnv

 

workerman源码分析(一)