Web Analytics

freddie

⭐ 99 stars Japanese by bpolaszek

Application Coverage

Freddie

FreddieはMercure Hub仕様のPHP実装です。

これは非常に高速で、偉大な先人たちの上に築かれています:

どの機能が対応済みで、どの機能がまだかはこちらをご覧ください。

インストール

ハブを実行するにはPHP 8.1以上が必要です。

単独のMercureハブとして

composer create-project freddie/mercure-x freddie && cd freddie
bin/freddie

これは匿名購読が有効な状態で、127.0.0.1:8080上にFreddieインスタンスを起動します。

HMAC SHA256アルゴリズムで!ChangeMe!キーに署名された有効なJWTを生成することで、ハブに更新を公開できます。

これらの値を変更するには、セキュリティを参照してください。

既存のSymfonyアプリケーションのバンドルとして

composer req freddie/mercure-x

次に、ハブを起動するには以下を実行します:

bin/console freddie:serve
.env.local ファイル内の関連する環境変数や、config/services.yaml 内のサービスを通常通り上書きできます。

その後、サービス内で Freddie\Hub\HubInterface を注入することで、$hub->publish($update) を呼び出したり、 CLI コンテキストでディスパッチされたアップデートをリッスンしたりできます 👍

これは Redis トランスポートを使用している場合のみ動作することに注意してください。

⚠️ Freddie は独自のルーティング/認証システムを使用しています(非同期/イベントループのため)。

公開されるコントローラーは routes.yaml にインポートできず、security.yaml のスコープ外になります。

使用方法

./bin/freddie

127.0.0.1:8080で新しいMercureハブを起動します。 このアドレスを変更するには、X_LISTEN環境変数を使用してください。

X_LISTEN="0.0.0.0:8000" ./bin/freddie

セキュリティ

デフォルトのJWTキーは !ChangeMe! で、署名アルゴリズムは HS256 です。

環境変数(.env.local またはOSレベル)を変更することで異なる値を設定できます: X_LISTENJWT_SECRET_KEYJWT_ALGORITHMJWT_PUBLIC_KEY、およびRS512やECDSAを使用する場合は JWT_PASSPHRASE

パブリッシャーおよび/またはサブスクライバーとして認証するには、Mercure仕様の認可セクションを参照してください。

PHPトランスポート(デフォルト)

デフォルトでは、ハブは単一のPHPプロセス内でシンプルなイベントディスパッチャーとして動作します。

これは基本的な使用には一般的なニーズに対応できますが、このトランスポートを使用するとスケーラビリティが制限されます。 別のプロセスを開いても同じイベントエミッターを共有しないためです。

次の場合には十分に使用可能です:

Redisトランスポート

一方で、Redisトランスポートを使用すると、複数のポートおよび/または複数のサーバーでハブを起動できます (同じRedisインスタンスを共有している限り)、そして任意でロードバランサーを使用してトラフィックを分散できます。

公式のオープンソース版ハブは、_bolt_ トランスポートの同時実行制限によりスケーリングを許可していません。

Redisトランスポートでハブを起動するには、TRANSPORT_DSN 環境変数を変更してください:

TRANSPORT_DSN="redis://127.0.0.1:6379" ./bin/freddie

DSNのクエリ文字列に渡すことができるオプションパラメータ:

_あるいは、この変数を .env.local に設定することもできます。_

利点と制限

この実装はSSLやHTTP2終端を提供しないため、前段にリバースプロキシを置くことを推奨します。

Nginx設定例

upstream freddie {
    # Example with a single node
    server 127.0.0.1:8080;

# Example with several nodes (they must share the same Redis instance) # 2 instances on 10.1.2.3 server 10.1.2.3:8080; server 10.1.2.3:8081;

# 2 instances on 10.1.2.4 server 10.1.2.4:8080; server 10.1.2.4:8081; }

server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name example.com;

ssl_certificate /etc/ssl/certs/example.com/example.com.cert; ssl_certificate_key /etc/ssl/certs/example.com/example.com.key; ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

location /.well-known/mercure { proxy_pass http://freddie; proxy_read_timeout 24h; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; } }

Caddyの設定例

#### 単一ノード

example.com

reverse_proxy 127.0.0.1:8080

#### 複数ノードの場合

example.com

reverse_proxy 10.1.2.3:8080 10.1.2.3:8081 10.1.2.4:8080 10.1.2.4:8081

ペイロード制限

Framework-Xにはリクエストボディが64 KBを超えないという既知の制限があります。 執筆時点では、この制限はFramework-XがHTTPサーバーのインスタンス化をカプセル化しているため引き上げられません。

Freddieへの大きなアップデート(少なくともHTTP経由)は400エラーを引き起こす可能性があります。

機能対応状況

| 機能 | 対応状況 | |---------------------------------------------|---------------------------------------| | AuthorizationヘッダーによるJWT | ✅ | | mercureAuthorizationクッキーによるJWT | ✅ | | 匿名購読者の許可 | ✅ | | 代替トピック | ✅️ | | プライベートアップデート | ✅ | | トピックのURIテンプレート | ✅ | | HMAC SHA256 JWT署名 | ✅ | | RS512 JWT署名 | ✅ | | 環境変数による設定 | ✅ | | カスタムメッセージID | ✅ | | 最終イベントID(earliest含む) | ✅️ | | カスタマイズ可能なイベントタイプ | ✅️ | | カスタマイズ可能なretryディレクティブ | ✅️ | | CORS | ❌(ウェブサーバーで設定してください) | | ヘルスチェックエンドポイント | ❌(PR歓迎) | | ロギング | ❌(PR歓迎)️ | | メトリクス | ❌(PR歓迎)️ | | 購読者/発行者で異なるJWT | ❌(PR歓迎) | | サブスクリプションAPI | ❌️(TODO) |

テスト

このプロジェクトはPestのテストで100%カバーされています。

composer tests:run

貢献する

このプロジェクトを改善したい場合は、PRを自由に提出してください:

すべてのCI要件を満たしていることを確認するために、コミット前に以下のコマンドを実行できます:

composer ci:check

ライセンス

GNU一般公衆利用許諾契約書バージョン3.0.

--- Tranlated By Open Ai Tx | Last indexed: 2026-03-11 ---