🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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(); ~~~