mirror of
https://gitee.com/hyperf/hyperf.git
synced 2024-12-02 03:37:44 +08:00
Translate
This commit is contained in:
parent
606b4adbb6
commit
8f3cd4489a
@ -51,6 +51,7 @@ return [
|
||||
'context' => null,
|
||||
'keepalive' => false,
|
||||
'heartbeat' => 3,
|
||||
'close_on_destruct' => false,
|
||||
],
|
||||
],
|
||||
'pool2' => [
|
||||
@ -293,4 +294,4 @@ class FooRpcMessage extends RpcMessage
|
||||
}
|
||||
```
|
||||
|
||||
這樣我們進行 RPC 調用時,只需直接傳遞 `FooRpcMessage` 實例到 `call` 方法即可,無需每次調用時都去定義 Exchange 和 RoutingKey。
|
||||
這樣我們進行 RPC 調用時,只需直接傳遞 `FooRpcMessage` 實例到 `call` 方法即可,無需每次調用時都去定義 Exchange 和 RoutingKey。
|
||||
|
@ -21,7 +21,7 @@ composer require hyperf/cache
|
||||
return [
|
||||
'default' => [
|
||||
'driver' => Hyperf\Cache\Driver\RedisDriver::class,
|
||||
'packer' => Hyperf\Utils\Packer\PhpSerializer::class,
|
||||
'packer' => Hyperf\Utils\Packer\PhpSerializerPacker::class,
|
||||
'prefix' => 'c:',
|
||||
],
|
||||
];
|
||||
|
@ -16,6 +16,7 @@
|
||||
## 新增
|
||||
|
||||
- [#1724](https://github.com/hyperf/hyperf/pull/1724) 新增模型方法 `Model::orWhereHasMorph` ,`Model::whereDoesntHaveMorph` and `Model::orWhereDoesntHaveMorph`;
|
||||
- [#1741](https://github.com/hyperf/hyperf/pull/1741) 新增 `Hyperf\Command\Command::choiceMultiple(): array` 方法,因為 `choice` 方法的返回類型為 `string,所以就算設置了 `$multiple` 參數也無法處理多個選擇的情況;
|
||||
- [#1742](https://github.com/hyperf/hyperf/pull/1742) 新增模型 自定義類型轉換器 功能;
|
||||
- 新增 interface `Castable`, `CastsAttributes` 和 `CastsInboundAttributes`;
|
||||
- 新增方法 `Model\Builder::withCasts`;
|
||||
|
19
doc/zh-hk/contribute.md
Normal file
19
doc/zh-hk/contribute.md
Normal file
@ -0,0 +1,19 @@
|
||||
# 參與開發
|
||||
|
||||
Hyperf 是一個開源項目,一個開源項目的發展離不開開源社區的力量支持,如果您希望參與 Hyperf 的開發,可以先從 [issues](https://github.com/hyperf/hyperf/issues?page=2&q=is%3Aissue+is%3Aopen) 開始,通常來説會有以下的一些步驟:
|
||||
|
||||
1. 關注 [issues](https://github.com/hyperf/hyperf/issues?page=2&q=is%3Aissue+is%3Aopen) 的動態,評論回覆幫助提出疑問的用户;
|
||||
2. 根據 [issues](https://github.com/hyperf/hyperf/issues?page=2&q=is%3Aissue+is%3Aopen) 的內容,找尋根據自己當前對 Hyperf 的瞭解程度,去修復力所能及的 BUG 或實現功能,並以 [Pull Request](https://https://github.com/hyperf/pulls) 的形式提交至 [hyperf/hyperf](https://github.com/hyperf/hyperf) 倉庫;
|
||||
3. 關注自己提交 Pull Request 的進度和狀態,以推動您的 Pull Request 儘快合入主倉庫;
|
||||
4. 對其他人提交的 Pull Request 進行 Code Review,並給出您的建議和看法。
|
||||
5. 根據他人或自己的需求,研發獨立的功能組件;
|
||||
6. 堅持並持續進行上述步驟。
|
||||
|
||||
## 加入 Hyperf 團隊
|
||||
|
||||
Hyperf 團隊是對 Hyperf 項目及其周邊項目進行持續維護和迭代的團隊,如果您希望加入其中,首先需要您對 Hyperf 擁有足夠且持續的熱情,因為需要您付出大量的時間和精力到 Hyperf 項目及其周邊項目的維護和迭代工作上,同時也需要您對 Hyperf 項目有足夠的深入瞭解,以便維護工作的進行。因此我們對加入 Hyperf 團隊也設有一定的門檻,您需要在 [hyperf/hyperf](https://github.com/hyperf/hyperf) 倉庫擁有最少 100 commits,或向 Hyperf 提交了多個優秀的組件,同時由任一現有的 Hyperf 團隊成員提名,並獲得團隊內超半數成員的同意。
|
||||
|
||||
加入到 Hyperf 團隊,您會得到包括但不限於以下的收穫:
|
||||
1. @hyperf.io E-mail
|
||||
2. [Jetbrains All Products Pack](https://www.jetbrains.com/store/#commercial?billing=yearly) (US $649/year)
|
||||
3. [Github team membership](https://github.com/orgs/hyperf/people)
|
@ -31,7 +31,7 @@ class IndexController
|
||||
通過 `cURL` 調用該地址,即可看到返回的內容。
|
||||
|
||||
```bash
|
||||
$ curl http://127.0.0.1:9501/\?target\=Hyperf
|
||||
$ curl 'http://127.0.0.1:9501/?target=Hyperf'
|
||||
Hello Hyperf.
|
||||
```
|
||||
|
||||
|
@ -132,7 +132,7 @@ class FooTask
|
||||
|
||||
#### 更改調度分發策略
|
||||
|
||||
通過在 `config/autoload/dependencies.php` 更改 `Hyperf\Crontab\Strategy\StrategyInterface` 接口類所對應的實例來更改目前所使用的策略,默認情況下使用 `多進程執行策略`,對應的類為 `Hyperf\Crontab\Strategy\ProcessStrategy`,如我們希望更改策略為一個新的策略,比如為 `App\Crontab\Strategy\FooStrategy`,那麼如下:
|
||||
通過在 `config/autoload/dependencies.php` 更改 `Hyperf\Crontab\Strategy\StrategyInterface` 接口類所對應的實例來更改目前所使用的策略,默認情況下使用 `Worker進程執行策略`,對應的類為 `Hyperf\Crontab\Strategy\WorkerStrategy`,如我們希望更改策略為一個新的策略,比如為 `App\Crontab\Strategy\FooStrategy`,那麼如下:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
@ -98,11 +98,11 @@ return [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
|
||||
PDO::ATTR_STRINGIFY_FETCHES => false,
|
||||
// 如果使用的為非原生 MySQL 或雲廠商提供的 DB 如從庫/分析型實例等不支持 MySQL prepare 協議的, 將此項設置為 true
|
||||
PDO::ATTR_EMULATE_PREPARES => false,
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
```
|
||||
|
||||
### 讀寫分離
|
||||
|
@ -408,3 +408,23 @@ Router::get('/metrics', function(){
|
||||
如果您啟用了默認指標,`Hyperf/Metric` 為您準備了一個開箱即用的 Grafana 控制枱。下載控制枱 [json 文件](https://cdn.jsdelivr.net/gh/hyperf/hyperf/src/metric/grafana.json),導入 Grafana 中即可使用。
|
||||
|
||||
![grafana](./imgs/grafana.png)
|
||||
|
||||
## 注意事項
|
||||
|
||||
### Prometheus 驅動
|
||||
- 如果使用 redis 等持久化存儲, 需要保持同一個 metric 的 label 前後一致, 否則會報錯
|
||||
- 如果使用 `in-memory` 存儲, `metric name` 推薦使用 **下劃線風格**, 如果包含 `:` 會導致失敗報錯
|
||||
```
|
||||
// vendor/endclothing/prometheus_client_php/src/Prometheus/Storage/InMemory.php:118
|
||||
foreach ($metric['samples'] as $key => $value) {
|
||||
$parts = explode(':', $key); // 這裏
|
||||
$labelValues = $parts[2];
|
||||
$data['samples'][] = [
|
||||
'name' => $metaData['name'],
|
||||
'labelNames' => [],
|
||||
'labelValues' => json_decode($labelValues),
|
||||
'value' => $value
|
||||
];
|
||||
}
|
||||
```
|
||||
- 如果選擇 **自定義 Histogram Bucket**, 一定要注意註冊的時機, 請確保 `registerHistogram()` 之前未觸發過同一名稱的 Histogram。
|
||||
|
@ -96,4 +96,7 @@ composer require "symfony/event-dispatcher:^4.3"
|
||||
},
|
||||
```
|
||||
|
||||
## 使用 AMQP 組件報 `Swoole\Error: API must be called in the coroutine` 錯誤
|
||||
|
||||
可以在 `config/autoload/amqp.php` 配置文件中將 `close_on_destruct` 改為 `false` 即可。
|
||||
|
||||
|
13
doc/zh-hk/release-planning.md
Normal file
13
doc/zh-hk/release-planning.md
Normal file
@ -0,0 +1,13 @@
|
||||
# 版本計劃
|
||||
|
||||
## 版本生命週期
|
||||
|
||||
| 版本 | 狀態 | 積極支持截止時間 | 安全維護截止時間 | 發佈或預計發佈時間 |
|
||||
| ---- | -------- | ---------------- | ---------------- | ------------------ |
|
||||
| 2.0 | 研發中 | / | / | 2020-06-23 |
|
||||
| 1.1 | 維護中 | 2020-06-23 | 2020-12-31 | |
|
||||
| 1.0 | 停止維護 | 2019-10-08 | 2019-12-31 | 2019-06-20 |
|
||||
|
||||
## 版本迭代週期
|
||||
|
||||
Hyperf 採用敏捷開發模式,每週一個迭代計劃,並於 `每週的星期四 (UTC/GMT+08:00)` 發佈一個版本,通常來説是一個 z 版本的發佈。關於 Hyperf 採用的版本規則,請查閲 [版本説明](zh/versions.md) 一章。
|
@ -288,3 +288,46 @@ class WebSocketController extends BaseNamespace
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Auth 鑑權
|
||||
|
||||
您可以通過使用中間件來攔截 WebSocket 握手,實現鑑權功能,如下:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Middleware;
|
||||
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Server\MiddlewareInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Psr\Http\Server\RequestHandlerInterface;
|
||||
|
||||
class WebSocketAuthMiddleware implements MiddlewareInterface
|
||||
{
|
||||
/**
|
||||
* @var ContainerInterface
|
||||
*/
|
||||
protected $container;
|
||||
|
||||
public function __construct(ContainerInterface $container)
|
||||
{
|
||||
$this->container = $container;
|
||||
}
|
||||
|
||||
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
||||
{
|
||||
// 偽代碼,通過 isAuth 方法攔截握手請求並實現權限檢查
|
||||
if (! $this->isAuth($request)) {
|
||||
return $this->container->get(\Hyperf\HttpServer\Contract\ResponseInterface::class)->raw('Forbidden');
|
||||
}
|
||||
|
||||
return $handler->handle($request);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
並將上面的中間件配置到對應的 WebSocket Server 中去即可。
|
||||
|
@ -3,6 +3,12 @@
|
||||
* [項目介紹](zh-hk/README.md)
|
||||
* [線上交流](zh-hk/communication.md)
|
||||
* [捐獻及贊助](zh-hk/donate.md)
|
||||
* [參與開發](zh-hk/contribute.md)
|
||||
|
||||
* 版本管理
|
||||
|
||||
* [版本計劃](zh-hk/release-planning.md)
|
||||
* [版本説明](zh-hk/versions.md)
|
||||
* [版本更新記錄](zh-hk/changelog.md)
|
||||
|
||||
* 快速入門
|
||||
|
12
doc/zh-hk/versions.md
Normal file
12
doc/zh-hk/versions.md
Normal file
@ -0,0 +1,12 @@
|
||||
# 版本説明
|
||||
|
||||
## 版本規則
|
||||
|
||||
Hyperf 採用 x.y.z 的版本號規則來命名各個版本,如 1.2.3 版本,1 即為 x,2 即為 y,3 即為 z,您可以根據該版本規則來制定您對 Hyperf 框架的更新計劃。
|
||||
- x 表示一個重大版本,當 Hyperf 的核心進行大量的重構變動時,或當存在大量的破壞性 API 變更時,會作為一個 x 版本發佈,x 版本變更通常來説是無法與之前的 x 版本兼容,但也不一定代表完全無法兼容,具體根據對應版本的升級指南來進行甄別。
|
||||
- y 表示一個主要功能迭代版本,當一些公開的 API 進行了破壞性的變更後,包括公開 API 的變更和刪除,導致前置版本可能無法兼容的時候,會以 y 版本來進行發佈。
|
||||
- z 表示一個完全兼容的修復版本,當對各個組件的已有功能進行 BUG 修復或安全修復時,會選擇以一個 z 版本來發布,當一個 BUG 導致了某個功能完全無法使用時,亦可能在 z 版本內修復這個 BUG 時對 API 進行破壞性變更,但由於功能此前已經完全無法使用故此類變更不會以 y 版本來發布,除了 BUG 修復,z 版本也可能會包括一些新增的功能或組件,這些功能和組件均不會影響此前的代碼使用。
|
||||
|
||||
## 升級版本
|
||||
|
||||
當您希望升級 Hyperf 版本時,如果是對 x 和 y 版本的升級,請根據文檔內對應版本的升級指南來進行操作。如您希望對 z 版本進行升級,可直接在您的項目的根目錄執行 `composer update hyperf` 命令來對依賴包進行更新,我們不建議您單獨升級某一個組件的版本,而是統一升級所有組件來獲得更加一致的體驗。
|
@ -112,6 +112,8 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Engine;
|
||||
|
||||
use Hyperf\View\Engine\EngineInterface;
|
||||
|
||||
class TemplateEngine implements EngineInterface
|
||||
{
|
||||
public function render($template, $data, $config): string
|
||||
|
@ -120,3 +120,27 @@ class WebSocketController implements OnMessageInterface, OnOpenInterface
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 多 server 配置
|
||||
|
||||
```
|
||||
# /etc/nginx/conf.d/ng_socketio.conf
|
||||
# 多個 ws server
|
||||
upstream io_nodes {
|
||||
server ws1:9502;
|
||||
server ws2:9502;
|
||||
}
|
||||
server {
|
||||
listen 9502;
|
||||
# server_name your.socket.io;
|
||||
location / {
|
||||
proxy_set_header Upgrade "websocket";
|
||||
proxy_set_header Connection "upgrade";
|
||||
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
# proxy_set_header Host $host;
|
||||
# proxy_http_version 1.1;
|
||||
# 轉發到多個 ws server
|
||||
proxy_pass http://io_nodes;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
@ -51,6 +51,7 @@ return [
|
||||
'context' => null,
|
||||
'keepalive' => false,
|
||||
'heartbeat' => 3,
|
||||
'close_on_destruct' => false,
|
||||
],
|
||||
],
|
||||
'pool2' => [
|
||||
@ -293,4 +294,4 @@ class FooRpcMessage extends RpcMessage
|
||||
}
|
||||
```
|
||||
|
||||
這樣我們進行 RPC 呼叫時,只需直接傳遞 `FooRpcMessage` 例項到 `call` 方法即可,無需每次呼叫時都去定義 Exchange 和 RoutingKey。
|
||||
這樣我們進行 RPC 呼叫時,只需直接傳遞 `FooRpcMessage` 例項到 `call` 方法即可,無需每次呼叫時都去定義 Exchange 和 RoutingKey。
|
||||
|
@ -122,7 +122,7 @@
|
||||
|
||||
- [donjan-deng/hyperf-permission](https://github.com/donjan-deng/hyperf-permission) 基於 [spatie/laravel-permission](https://github.com/spatie/laravel-permission) 開發的適配 Hyperf 的許可權元件
|
||||
- [fx/hyperf-http-auth](https://github.com/nfangxu/hyperf-http-auth) 根據 laravel 中的 auth 元件改寫的, 適配 hyperf 框架
|
||||
- [96qbhy/hyperf-auth](https://github.com/qbhy/hyperf-auth) 參考 laravel 的 auth 組件設計,支持 jwt 和 session驅動,更輕巧更好用
|
||||
- [96qbhy/hyperf-auth](https://github.com/qbhy/hyperf-auth) 參考 laravel 的 auth 元件設計,支援 jwt 和 session驅動,更輕巧更好用
|
||||
|
||||
## 第三方 SDK
|
||||
|
||||
|
@ -21,7 +21,7 @@ composer require hyperf/cache
|
||||
return [
|
||||
'default' => [
|
||||
'driver' => Hyperf\Cache\Driver\RedisDriver::class,
|
||||
'packer' => Hyperf\Utils\Packer\PhpSerializer::class,
|
||||
'packer' => Hyperf\Utils\Packer\PhpSerializerPacker::class,
|
||||
'prefix' => 'c:',
|
||||
],
|
||||
];
|
||||
|
@ -16,6 +16,7 @@
|
||||
## 新增
|
||||
|
||||
- [#1724](https://github.com/hyperf/hyperf/pull/1724) 新增模型方法 `Model::orWhereHasMorph` ,`Model::whereDoesntHaveMorph` and `Model::orWhereDoesntHaveMorph`;
|
||||
- [#1741](https://github.com/hyperf/hyperf/pull/1741) 新增 `Hyperf\Command\Command::choiceMultiple(): array` 方法,因為 `choice` 方法的返回型別為 `string,所以就算設定了 `$multiple` 引數也無法處理多個選擇的情況;
|
||||
- [#1742](https://github.com/hyperf/hyperf/pull/1742) 新增模型 自定義型別轉換器 功能;
|
||||
- 新增 interface `Castable`, `CastsAttributes` 和 `CastsInboundAttributes`;
|
||||
- 新增方法 `Model\Builder::withCasts`;
|
||||
|
19
doc/zh-tw/contribute.md
Normal file
19
doc/zh-tw/contribute.md
Normal file
@ -0,0 +1,19 @@
|
||||
# 參與開發
|
||||
|
||||
Hyperf 是一個開源專案,一個開源專案的發展離不開開源社群的力量支援,如果您希望參與 Hyperf 的開發,可以先從 [issues](https://github.com/hyperf/hyperf/issues?page=2&q=is%3Aissue+is%3Aopen) 開始,通常來說會有以下的一些步驟:
|
||||
|
||||
1. 關注 [issues](https://github.com/hyperf/hyperf/issues?page=2&q=is%3Aissue+is%3Aopen) 的動態,評論回覆幫助提出疑問的使用者;
|
||||
2. 根據 [issues](https://github.com/hyperf/hyperf/issues?page=2&q=is%3Aissue+is%3Aopen) 的內容,找尋根據自己當前對 Hyperf 的瞭解程度,去修復力所能及的 BUG 或實現功能,並以 [Pull Request](https://https://github.com/hyperf/pulls) 的形式提交至 [hyperf/hyperf](https://github.com/hyperf/hyperf) 倉庫;
|
||||
3. 關注自己提交 Pull Request 的進度和狀態,以推動您的 Pull Request 儘快合入主倉庫;
|
||||
4. 對其他人提交的 Pull Request 進行 Code Review,並給出您的建議和看法。
|
||||
5. 根據他人或自己的需求,研發獨立的功能元件;
|
||||
6. 堅持並持續進行上述步驟。
|
||||
|
||||
## 加入 Hyperf 團隊
|
||||
|
||||
Hyperf 團隊是對 Hyperf 專案及其周邊專案進行持續維護和迭代的團隊,如果您希望加入其中,首先需要您對 Hyperf 擁有足夠且持續的熱情,因為需要您付出大量的時間和精力到 Hyperf 專案及其周邊專案的維護和迭代工作上,同時也需要您對 Hyperf 專案有足夠的深入瞭解,以便維護工作的進行。因此我們對加入 Hyperf 團隊也設有一定的門檻,您需要在 [hyperf/hyperf](https://github.com/hyperf/hyperf) 倉庫擁有最少 100 commits,或向 Hyperf 提交了多個優秀的元件,同時由任一現有的 Hyperf 團隊成員提名,並獲得團隊內超半數成員的同意。
|
||||
|
||||
加入到 Hyperf 團隊,您會得到包括但不限於以下的收穫:
|
||||
1. @hyperf.io E-mail
|
||||
2. [Jetbrains All Products Pack](https://www.jetbrains.com/store/#commercial?billing=yearly) (US $649/year)
|
||||
3. [Github team membership](https://github.com/orgs/hyperf/people)
|
@ -31,7 +31,7 @@ class IndexController
|
||||
通過 `cURL` 呼叫該地址,即可看到返回的內容。
|
||||
|
||||
```bash
|
||||
$ curl http://127.0.0.1:9501/\?target\=Hyperf
|
||||
$ curl 'http://127.0.0.1:9501/?target=Hyperf'
|
||||
Hello Hyperf.
|
||||
```
|
||||
|
||||
|
@ -132,7 +132,7 @@ class FooTask
|
||||
|
||||
#### 更改排程分發策略
|
||||
|
||||
通過在 `config/autoload/dependencies.php` 更改 `Hyperf\Crontab\Strategy\StrategyInterface` 介面類所對應的例項來更改目前所使用的策略,預設情況下使用 `多程序執行策略`,對應的類為 `Hyperf\Crontab\Strategy\ProcessStrategy`,如我們希望更改策略為一個新的策略,比如為 `App\Crontab\Strategy\FooStrategy`,那麼如下:
|
||||
通過在 `config/autoload/dependencies.php` 更改 `Hyperf\Crontab\Strategy\StrategyInterface` 介面類所對應的例項來更改目前所使用的策略,預設情況下使用 `Worker程序執行策略`,對應的類為 `Hyperf\Crontab\Strategy\WorkerStrategy`,如我們希望更改策略為一個新的策略,比如為 `App\Crontab\Strategy\FooStrategy`,那麼如下:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
@ -98,11 +98,11 @@ return [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
|
||||
PDO::ATTR_STRINGIFY_FETCHES => false,
|
||||
// 如果使用的為非原生 MySQL 或雲廠商提供的 DB 如從庫/分析型例項等不支援 MySQL prepare 協議的, 將此項設定為 true
|
||||
PDO::ATTR_EMULATE_PREPARES => false,
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
```
|
||||
|
||||
### 讀寫分離
|
||||
|
@ -408,3 +408,23 @@ Router::get('/metrics', function(){
|
||||
如果您啟用了預設指標,`Hyperf/Metric` 為您準備了一個開箱即用的 Grafana 控制檯。下載控制檯 [json 檔案](https://cdn.jsdelivr.net/gh/hyperf/hyperf/src/metric/grafana.json),匯入 Grafana 中即可使用。
|
||||
|
||||
![grafana](./imgs/grafana.png)
|
||||
|
||||
## 注意事項
|
||||
|
||||
### Prometheus 驅動
|
||||
- 如果使用 redis 等持久化儲存, 需要保持同一個 metric 的 label 前後一致, 否則會報錯
|
||||
- 如果使用 `in-memory` 儲存, `metric name` 推薦使用 **下劃線風格**, 如果包含 `:` 會導致失敗報錯
|
||||
```
|
||||
// vendor/endclothing/prometheus_client_php/src/Prometheus/Storage/InMemory.php:118
|
||||
foreach ($metric['samples'] as $key => $value) {
|
||||
$parts = explode(':', $key); // 這裡
|
||||
$labelValues = $parts[2];
|
||||
$data['samples'][] = [
|
||||
'name' => $metaData['name'],
|
||||
'labelNames' => [],
|
||||
'labelValues' => json_decode($labelValues),
|
||||
'value' => $value
|
||||
];
|
||||
}
|
||||
```
|
||||
- 如果選擇 **自定義 Histogram Bucket**, 一定要注意註冊的時機, 請確保 `registerHistogram()` 之前未觸發過同一名稱的 Histogram。
|
||||
|
@ -96,4 +96,7 @@ composer require "symfony/event-dispatcher:^4.3"
|
||||
},
|
||||
```
|
||||
|
||||
## 使用 AMQP 元件報 `Swoole\Error: API must be called in the coroutine` 錯誤
|
||||
|
||||
可以在 `config/autoload/amqp.php` 配置檔案中將 `close_on_destruct` 改為 `false` 即可。
|
||||
|
||||
|
13
doc/zh-tw/release-planning.md
Normal file
13
doc/zh-tw/release-planning.md
Normal file
@ -0,0 +1,13 @@
|
||||
# 版本計劃
|
||||
|
||||
## 版本生命週期
|
||||
|
||||
| 版本 | 狀態 | 積極支援截止時間 | 安全維護截止時間 | 釋出或預計釋出時間 |
|
||||
| ---- | -------- | ---------------- | ---------------- | ------------------ |
|
||||
| 2.0 | 研發中 | / | / | 2020-06-23 |
|
||||
| 1.1 | 維護中 | 2020-06-23 | 2020-12-31 | |
|
||||
| 1.0 | 停止維護 | 2019-10-08 | 2019-12-31 | 2019-06-20 |
|
||||
|
||||
## 版本迭代週期
|
||||
|
||||
Hyperf 採用敏捷開發模式,每週一個迭代計劃,並於 `每週的星期四 (UTC/GMT+08:00)` 釋出一個版本,通常來說是一個 z 版本的釋出。關於 Hyperf 採用的版本規則,請查閱 [版本說明](zh/versions.md) 一章。
|
@ -288,3 +288,46 @@ class WebSocketController extends BaseNamespace
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Auth 鑑權
|
||||
|
||||
您可以通過使用中介軟體來攔截 WebSocket 握手,實現鑑權功能,如下:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Middleware;
|
||||
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Server\MiddlewareInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Psr\Http\Server\RequestHandlerInterface;
|
||||
|
||||
class WebSocketAuthMiddleware implements MiddlewareInterface
|
||||
{
|
||||
/**
|
||||
* @var ContainerInterface
|
||||
*/
|
||||
protected $container;
|
||||
|
||||
public function __construct(ContainerInterface $container)
|
||||
{
|
||||
$this->container = $container;
|
||||
}
|
||||
|
||||
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
||||
{
|
||||
// 虛擬碼,通過 isAuth 方法攔截握手請求並實現許可權檢查
|
||||
if (! $this->isAuth($request)) {
|
||||
return $this->container->get(\Hyperf\HttpServer\Contract\ResponseInterface::class)->raw('Forbidden');
|
||||
}
|
||||
|
||||
return $handler->handle($request);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
並將上面的中介軟體配置到對應的 WebSocket Server 中去即可。
|
||||
|
@ -3,6 +3,12 @@
|
||||
* [專案介紹](zh-tw/README.md)
|
||||
* [線上交流](zh-tw/communication.md)
|
||||
* [捐獻及贊助](zh-tw/donate.md)
|
||||
* [參與開發](zh-tw/contribute.md)
|
||||
|
||||
* 版本管理
|
||||
|
||||
* [版本計劃](zh-tw/release-planning.md)
|
||||
* [版本說明](zh-tw/versions.md)
|
||||
* [版本更新記錄](zh-tw/changelog.md)
|
||||
|
||||
* 快速入門
|
||||
|
12
doc/zh-tw/versions.md
Normal file
12
doc/zh-tw/versions.md
Normal file
@ -0,0 +1,12 @@
|
||||
# 版本說明
|
||||
|
||||
## 版本規則
|
||||
|
||||
Hyperf 採用 x.y.z 的版本號規則來命名各個版本,如 1.2.3 版本,1 即為 x,2 即為 y,3 即為 z,您可以根據該版本規則來制定您對 Hyperf 框架的更新計劃。
|
||||
- x 表示一個重大版本,當 Hyperf 的核心進行大量的重構變動時,或當存在大量的破壞性 API 變更時,會作為一個 x 版本釋出,x 版本變更通常來說是無法與之前的 x 版本相容,但也不一定代表完全無法相容,具體根據對應版本的升級指南來進行甄別。
|
||||
- y 表示一個主要功能迭代版本,當一些公開的 API 進行了破壞性的變更後,包括公開 API 的變更和刪除,導致前置版本可能無法相容的時候,會以 y 版本來進行釋出。
|
||||
- z 表示一個完全相容的修復版本,當對各個元件的已有功能進行 BUG 修復或安全修復時,會選擇以一個 z 版本來發布,當一個 BUG 導致了某個功能完全無法使用時,亦可能在 z 版本內修復這個 BUG 時對 API 進行破壞性變更,但由於功能此前已經完全無法使用故此類變更不會以 y 版本來發布,除了 BUG 修復,z 版本也可能會包括一些新增的功能或元件,這些功能和元件均不會影響此前的程式碼使用。
|
||||
|
||||
## 升級版本
|
||||
|
||||
當您希望升級 Hyperf 版本時,如果是對 x 和 y 版本的升級,請根據文件內對應版本的升級指南來進行操作。如您希望對 z 版本進行升級,可直接在您的專案的根目錄執行 `composer update hyperf` 命令來對依賴包進行更新,我們不建議您單獨升級某一個元件的版本,而是統一升級所有元件來獲得更加一致的體驗。
|
@ -112,6 +112,8 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Engine;
|
||||
|
||||
use Hyperf\View\Engine\EngineInterface;
|
||||
|
||||
class TemplateEngine implements EngineInterface
|
||||
{
|
||||
public function render($template, $data, $config): string
|
||||
|
@ -120,3 +120,27 @@ class WebSocketController implements OnMessageInterface, OnOpenInterface
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 多 server 配置
|
||||
|
||||
```
|
||||
# /etc/nginx/conf.d/ng_socketio.conf
|
||||
# 多個 ws server
|
||||
upstream io_nodes {
|
||||
server ws1:9502;
|
||||
server ws2:9502;
|
||||
}
|
||||
server {
|
||||
listen 9502;
|
||||
# server_name your.socket.io;
|
||||
location / {
|
||||
proxy_set_header Upgrade "websocket";
|
||||
proxy_set_header Connection "upgrade";
|
||||
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
# proxy_set_header Host $host;
|
||||
# proxy_http_version 1.1;
|
||||
# 轉發到多個 ws server
|
||||
proxy_pass http://io_nodes;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
Loading…
Reference in New Issue
Block a user