## 官方文檔:
https://www.workerman.net/plugin/13
Stomp封裝的Message Queue中間件
# 原理:
## 循環投遞數據,然后投遞完畢可以關閉瀏覽器---->然后讓消費端去完成數據然后存入redis或者mysql里。
## 真正 實現了程序異步設計的思想
## 投遞端
```
<?php
namespace app\controller;
use support\Request;
use Webman\Stomp\Client;
class Index
{
public function queue(Request $request)
{
// 隊列
$queue = 'examples';
// 數據(傳遞數組時需要自行序列化,比如使用json_encode,serialize等)
$data = json_encode(['to' => 'tom@gmail.com', 'content' => 'hello']);
// 執行投遞
Client::send($queue, $data);
return response('redis queue test');
}
}
```
## 消費消息端
```
<?php
namespace app\queue\stomp;
use Workerman\Stomp\AckResolver;
use Webman\Stomp\Consumer;
class MyMailSend implements Consumer
{
// 隊列名
public $queue = 'examples';
// 連接名,對應 stomp.php 里的連接`
public $connection = 'default';
// 值為 client 時需要調用$ack_resolver->ack()告訴服務端已經成功消費
// 值為 auto 時無需調用$ack_resolver->ack()
public $ack = 'auto';
// 消費
public function consume($data, AckResolver $ack_resolver = null)
{
// 如果是數據是數組,需要自行反序列化
var_export(json_decode($data, true)); // 輸出 ['to' => 'tom@gmail.com', 'content' => 'hello']
// 告訴服務端,已經成功消費
$ack_resolver->ack(); // ack為 auto時可以省略此調用
}
}
```
# 配置:

```
<?php
return [
'default' => [
'host' => 'stomp://127.0.0.1:61613',
'options' => [
'vhost' => '/',
'login' => 'guest',
'passcode' => 'guest',
'debug' => false,
],
'amqp' => [
'host' => '127.0.0.1',
'port' => 5672,
'namespace' => '',
'exchange_name' => 'exchange',
'exchange_delay' => true
]
]
];
```
- 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里使用