经过了简单的梳理workerman代码流程,核心类库就三个一个是worker类,一个是select类,最后一个是tcp类,下面我就上代码吧:
1.worker类 我就改名为http,代码如下:
class Http
{
/**
* 存放select类的初始化
*/
public static $globalEvent;
/**
* 协议转换数组
*/
protected $builtinTransports = array(
'tcp' => 'tcp',
'udp' => 'udp',
'unix' => 'unix',
'ssl' => 'tcp',
);
/**
* 默认协议
*/
protected $transport = "tcp";
/**
* 地址
*/
protected $address;
/**
* 协议头
*/
protected $scheme;
/**
* 协议命名空间字符串
*/
protected $protocol;
/**
* 流服务内容
*/
protected $context;
/**
* 主socket
*/
protected $mainSocket;
const EV_READ = 1;
/**
* worker id
*/
protected $workerId;
/**
* 所有woeker的集合数组
*/
protected static $workers = array();
/**
* socket名称
*/
protected $socketName;
protected $pauseAccept = true;
/**
* 构造函数
*/
public function __construct($socket_name = "", array $context_option = array())
{
$this->workerId = \spl_object_hash($this);
static::$workers[$this->workerId] = $this;
if ($socket_name) {
$this->socketName = $socket_name;
if (!isset($context_option['socket']['backlog'])) {
$context_option['socket']['backlog'] = 102400;
}
$this->context = stream_context_create($context_option);
}
}
/**
* 执行函数
*/
public static function runAll()
{
reset(static::$workers);
$worker = current(static::$workers);
static::$globalEvent = new select();
$worker->listen();
\restore_error_handler();
static::$globalEvent->loop();
}
public function acceptConnection($socket)
{
set_error_handler(function(){});
$new_so