# 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();
~~~
- WebSocket协议
- 构造函数(6种协议)
- count(进程设置)
- name(链接名称)
- $daemonize(守护进程设置)
- logFile(日志路径)
- stdoutFile(守护进程记录文件)
- connections(获取链接数组的)
- worker的回调属性
- worker类的方法
- Connection类的方法
- getRemotePort获取端口方法
- getRemoteIp获取IP地址
- close 安全关闭连接
- 定时器
- Channel分布式通信组件
- 心跳检测程序
- liunx优化配置
- thinkphp5.1使用worerman
- thinkphp5.1中用Channel实现广播通信
- thinkphp5.1中使用定时器
- thinkphp5.1使用TcpConnection类
- Gateway类使用
- BusinessWorker使用
- Register类的使用
- Events类使用(业务逻辑层)
- Lib\Gateway 接口(经常用)
- webman中间件stomp
- Gateway在thinkphp5.1里使用