# listen
~~~
void Worker::listen(void)
~~~
用于实例化Worker后执行监听。
此方法主要用于在Worker进程启动后动态创建新的Worker实例,能够实现同一个进程监听多个端口,支持多种协议。需要注意的是用这种方法只是在当前进程增加监听,并不会动态创建新的进程,~~也不会触发onWorkerStart方法。~~
>[danger] 在WarriorMan中,会触发各种回调,和当前协程主Worker并无区别
例如一个http Worker启动后实例化一个websocket Worker,那么这个进程即能通过http协议访问,又能通过websocket协议访问。由于websocket Worker和http Worker在同一个进程中,所以它们可以访问共同的内存变量,共享所有socket连接。可以做到接收http请求,然后操作websocket客户端完成向客户端推送数据类似的效果。
**例子:**
~~~
$worker = new Worker("tcp://0.0.0.0:8080");
$worker->count = 2;
$worker->name = "tcpServer"; // 设置名字
$worker->protocol = "\Workerman\Protocols\Http"; // 设置协议
$worker->onWorkerStart = function ($worker) {
$inner_text_worker = new Worker('tcp://0.0.0.0:5678');
//必须开启端口复用,否则会报错
$inner_text_worker->reusePort = true;
$inner_text_worker->protocol = "\Workerman\Protocols\Http"; // 设置协议
$inner_text_worker->onWorkerStart = function ($worker) {
var_dump("inner_text_worker");
};
$inner_text_worker->onMessage = function ($connection, $buffer) {
$connection->send("inner_text_worker");
};
// ## 执行监听 ##
$inner_text_worker->listen();
};
// 运行worker
Worker::runAll();
~~~
- 序言
- 启动停止
- 简单的开发示例
- 性能测试
- 性能测试-数据库
- 通讯协议
- Coroutine类
- create
- getCid
- yield
- resume
- sleep
- wait
- getTotalNum
- isExist
- defer
- Runtime类
- Worker类
- 构造函数
- 属性
- workerId
- id
- name
- protocol
- transport
- reusePort
- backlog
- connections
- stdoutFile
- pidFile
- logFile
- user
- reloadable
- daemonize
- globalEvent
- 回调属性
- onWorkerStart
- onWorkerReload
- onConnect
- onMessage
- onClose
- onBufferFull
- onBufferDrain
- onError
- 方法
- rename
- runAll
- stopAll
- listen
- TcpConnection类
- 属性
- id
- protocol
- worker
- maxSendBufferSize
- defaultMaxSendBufferSize
- defaultMaxPackageSize
- 方法
- set
- send
- getRemoteIp
- getRemotePort
- close
- destroy
- pauseRecv
- resumeRecv
- pipe
- Timer定时器类
- add
- del
- 定时器注意事项
- Channel类
- 构造方法
- push
- pop
- length
- isEmpty()