2019-12-12 16:24:04 +08:00
|
|
|
# 輔助類
|
|
|
|
|
|
|
|
Hyperf 提供了大量便捷的輔助類,這裏會列出一些常用的好用的,不會列舉所有,可自行查看 [hyperf/utils](https://github.com/hyperf/utils) 組件的代碼獲得更多信息。
|
|
|
|
|
|
|
|
## 協程輔助類
|
|
|
|
|
|
|
|
### Hyperf\Utils\Coroutine
|
|
|
|
|
|
|
|
該輔助類用於協助進行協程相關的判斷或操作。
|
|
|
|
|
|
|
|
#### id(): int
|
|
|
|
|
|
|
|
通過靜態方法 `id()` 獲得當前所處的 `協程 ID`,如當前不處於協程環境下,則返回 `-1`。
|
|
|
|
|
|
|
|
#### create(callable $callable): int
|
|
|
|
|
|
|
|
通過靜態方法 `create(callable $callable)` 可創建一個協程,還可以通過全局函數 `co(callable $callable)` 或 `go(callable $callable)` 達到同樣的目的,該方法是對 `Swoole` 創建協程方法的一個封裝,區別在於不會拋出未捕獲的異常,未捕獲的異常會通過 `Hyperf\Contract\StdoutLoggerInterface` 以 `warning` 等級輸出。
|
|
|
|
|
|
|
|
#### inCoroutine(): bool
|
|
|
|
|
|
|
|
通過靜態方法 `inCoroutine()` 判斷當前是否處於協程環境下。
|
|
|
|
|
|
|
|
### Hyperf\Utils\Context
|
|
|
|
|
|
|
|
用於處理協程上下文,本質上是對 `Swoole\Coroutine::getContext()` 方法的一個封裝,但區別在於這裏兼容了非協程環境下的運行。
|
2020-04-16 15:02:05 +08:00
|
|
|
|
|
|
|
### Hyperf\Utils\Coordinator\CoordinatorManager
|
|
|
|
|
|
|
|
該輔助類用於指揮協程等待事件發生。
|
|
|
|
|
|
|
|
```php
|
|
|
|
<?php
|
|
|
|
use Hyperf\Utils\Coordinator\CoordinatorManager;
|
|
|
|
use Hyperf\Utils\Coordinator\Constants;
|
|
|
|
use Hyperf\Utils\Coroutine;
|
|
|
|
|
|
|
|
Coroutine::create(function() {
|
|
|
|
// 所有OnWorkerStart事件回調完成後喚醒
|
|
|
|
CoordinatorManager::until(Constants::WORKER_START)->yield();
|
|
|
|
echo 'worker started';
|
|
|
|
// 分配資源
|
|
|
|
// 所有OnWorkerExit事件回調完成後喚醒
|
|
|
|
CoordinatorManager::until(Constants::WORKER_EXIT)->yield();
|
|
|
|
echo 'worker exited';
|
|
|
|
// 回收資源
|
|
|
|
});
|
|
|
|
```
|