最近正在学习workerman,看到源码里的listen() 和 run() 函数里面都有一个add()方法。
// 放到全局事件轮询中监听_mainSocket可读事件(客户端连接事件)
if(self::$globalEvent) // 此处是实例化的Select
{
if($this->transport !== 'udp')
{
self::$globalEvent->add($this->_mainSocket, EventInterface::EV_READ, array($this, 'acceptConnection')); // 添加到select 事件库中 读事件
}
else
{
self::$globalEvent->add($this->_mainSocket, EventInterface::EV_READ, array($this, 'acceptUdpConnection'));
}
}
**此处的add方法是listen()的最后调用的,后面我有看到 run()方法里面也有add() 方法,但是listen() 和 run()里面的add()方法虽然是一样的,但是应该是互相独立的,因为都各自实例化了下 Select(),但是我不明白的是listen()最后调用了 add() 进行添加到select 事件库中,但是好像后面并没有了其他操作,而run()方法里面调用了add()方法,它后面好歹有TIme() 和 loop()进行后续处理啊。
跪求哪位高手给我详细分析下啊, listen() 调用的 add() 的作用哈**
workerman允许在服务运行过程中调用new Worker实例化Worker建立监听其它端口。此时因为已经在运行,所以不需要调用run方法,直接调用listen方法,将新的监听add到EventLoop中即可。