合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
# onWorkerStart 启动进程 ## 设置Worker子进程启动时的回调函数,每个子进程启动时都会执行。 ## 语法: ~~~ $worker->onWorkerStart = function($worker) { echo "1111" .PHP_EOL; }; ~~~ ![](https://img.kancloud.cn/01/08/01085b2e786bda4159f934d151de9134_1233x665.png) # onConnect 建立链接 当客户端与Workerman建立连接时(TCP三次握手完成后)触发的回调函数。每个连接只会触发一次onConnect回调。 ~~~ $worker->onConnect=function ($connection){ }; ~~~ ![](https://img.kancloud.cn/2e/a3/2ea34e763b88f0cc8a6979eaecd8a1d4_1274x665.png) # onMessage 发送信息 当客户端通过连接发来数据时(Workerman收到数据时)触发的回调函数 回调函数的参数 ``` $connection ``` 连接对象,即TcpConnetion实例,用于操作客户端连接,如发送数据,关闭连接等 ``` $data ``` 客户端连接发来的数据,如果worker指定了协议,则$data是对呀协议decode(解码)了的数据 ## 代码案例: ~~~ $worker->onMessage=function ($connection,$data){ echo $data; //接受客户端发来消息 $connection->send("已经收到您发来的消息---".$data.PHP_EOL); }; ~~~ ![](https://img.kancloud.cn/ec/b9/ecb9697b42f0b5901d1077514b6ec4c0_1222x502.png) ![](https://img.kancloud.cn/69/64/6964e826d5f27112a9cf886817e76902_672x575.png) # onClose 关闭连接 ## 当客户端连接与Workerman断开时触发的回调函数。不管连接是如何断开的,只要断开就会触发onClose。每个连接只会触发一次onClose。 注意:如果对端是由于断网或者断电等极端情况断开的连接,这时由于无法及时发送tcp的fin包给workerman,workerman就无法得知连接已经断开,也就无法及时触发onClose。这种情况需要通过应用层心跳来解决。workerman中连接的心跳实现参见。如果使用的是GatewayWorker框架,则直接使用GatewayWorker框架的心跳机制即可,参见这里。 # 语法: ~~~ //关闭连接 $worker->onClose=function ($connection){ echo "关闭连接"; }; ~~~ ![](https://img.kancloud.cn/36/c3/36c314f10e9023363d71f4f407dd4f7c_1632x722.png) <br/> <br/> # 以上所有的整体代码: ~~~ <?php require_once 'workerman/Autoloader.php'; use Workerman\Worker; use Workerman\Timer; $worker = new Worker('text://0.0.0.0:8881'); $worker->count=4; //进程为CPU的2倍 $worker->name='chat'; //更改名称 //$worker::$daemonize=true; //守护进程 $worker->onWorkerStart = function($worker) { echo "1111" .PHP_EOL; }; //准备连接 $worker->onConnect=function ($connection){ echo "连接成功---IP:".$connection->getRemoteIp(); $connection->send("连接成功---IP:".$connection->getRemoteIp()); }; //连接成功发送接收消息 $worker->onMessage=function ($connection,$data){ echo $data; //接受客户端发来消息 $connection->send("已经收到您发来的消息---".$data.PHP_EOL); }; //关闭连接 $worker->onClose=function ($connection){ echo "关闭连接"; }; // 运行worker Worker::runAll(); ~~~