# onWorkerStart 啟動進程
## 設置Worker子進程啟動時的回調函數,每個子進程啟動時都會執行。
## 語法:
~~~
$worker->onWorkerStart = function($worker)
{
echo "1111" .PHP_EOL;
};
~~~

# onConnect 建立鏈接
當客戶端與Workerman建立連接時(TCP三次握手完成后)觸發的回調函數。每個連接只會觸發一次onConnect回調。
~~~
$worker->onConnect=function ($connection){
};
~~~

# onMessage 發送信息
當客戶端通過連接發來數據時(Workerman收到數據時)觸發的回調函數
回調函數的參數
```
$connection
```
連接對象,即TcpConnetion實例,用于操作客戶端連接,如發送數據,關閉連接等
```
$data
```
客戶端連接發來的數據,如果worker指定了協議,則$data是對呀協議decode(解碼)了的數據
## 代碼案例:
~~~
$worker->onMessage=function ($connection,$data){
echo $data; //接受客戶端發來消息
$connection->send("已經收到您發來的消息---".$data.PHP_EOL);
};
~~~


# onClose 關閉連接
## 當客戶端連接與Workerman斷開時觸發的回調函數。不管連接是如何斷開的,只要斷開就會觸發onClose。每個連接只會觸發一次onClose。
注意:如果對端是由于斷網或者斷電等極端情況斷開的連接,這時由于無法及時發送tcp的fin包給workerman,workerman就無法得知連接已經斷開,也就無法及時觸發onClose。這種情況需要通過應用層心跳來解決。workerman中連接的心跳實現參見。如果使用的是GatewayWorker框架,則直接使用GatewayWorker框架的心跳機制即可,參見這里。
# 語法:
~~~
//關閉連接
$worker->onClose=function ($connection){
echo "關閉連接";
};
~~~

<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里使用