alexusmai / laravel-centrifugo
laravel 9 和 Centrifugo 4 的 Centrifugo 广播器
1.4
2023-04-14 07:00 UTC
Requires
- php: ^8.0
- ext-json: *
- guzzlehttp/guzzle: ^7.0
- laravel/framework: ^8.75.0|^9.0|^10.0
README
Laravel 9 的 Centrifugo 广播驱动程序
简介
基于 LaraComponents/centrifugo-broadcaster 和 centrifugal/phpcent,为 laravel 创建的 Centrifugo 广播器
特性
- 兼容 Centrifugo 4 🚀
- 封装了 Centrifugo HTTP API 🔌
- 使用 JWT 令牌(HMAC 算法)进行身份验证,用于匿名用户、认证用户和私有频道 🗝️
要求
- PHP >= 8.0, 8.1
- Laravel 9.0
- guzzlehttp/guzzle 7
- Centrifugo Server 4
安装
使用 composer 需求此包
composer req alexusmai/laravel-centrifugo
打开您的 config/app.php 并将以下内容添加到 providers 数组中
'providers' => [ // And uncomment BroadcastServiceProvider App\Providers\BroadcastServiceProvider::class, ],
打开您的 config/broadcasting.php 并添加新的连接,如下所示
'centrifugo' => [ 'driver' => 'centrifugo', 'token_hmac_secret_key' => env('CENTRIFUGO_TOKEN_HMAC_SECRET_KEY',''), 'api_key' => env('CENTRIFUGO_API_KEY',''), 'url' => env('CENTRIFUGO_URL', 'https://:8000'), // centrifugo api url 'verify' => env('CENTRIFUGO_VERIFY', false), // Verify host ssl if centrifugo uses this 'ssl_key' => env('CENTRIFUGO_SSL_KEY', null), // Self-Signed SSl Key for Host (require verify=true) 'use_namespace' => env('CENTRIFUGO_USE_NAMESPACE', false), 'default_namespace' => env('CENTRIFUGO_DEFAULT_NAMESPACE', 'default:'), 'private_namespace' => env('CENTRIFUGO_PRIVATE_NAMESPACE', 'private:'), 'presence_namespace' => env('CENTRIFUGO_PRESENCE_NAMESPACE', 'presence:'), ],
您还应在 .env 文件中添加以下两行
CENTRIFUGO_TOKEN_HMAC_SECRET_KEY=token_hmac_secret_key-from-centrifugo-config
CENTRIFUGO_API_KEY=api_key-from-centrifugo-config
CENTRIFUGO_URL=https://:8000
这些行是可选的
CENTRIFUGO_SSL_KEY=/etc/ssl/some.pem
CENTRIFUGO_VERIFY=false
CENTRIFUGO_USE_NAMESPACE=true // use centrifugo namespaces
CENTRIFUGO_DEFAULT_NAMESPACE=default: // add to channel name default namespace - default:channel_name
CENTRIFUGO_PRIVATE_NAMESPACE=private: // change default "private-" laravel prefix to private namespace - private-channel_name -> private:channel_name
CENTRIFUGO_PRESENCE_NAMESPACE=presence: // change default "presence-" laravel prefix to presence namespace - presence-channel_name -> presence:channel_name
不要忘记更改 .env 文件中的 BROADCAST_DRIVER
设置!
BROADCAST_DRIVER=centrifugo
基本用法
要配置 Centrifugo 服务器,请阅读 官方文档
有关广播事件,请参阅 Laravel 官方文档
简单的客户端用法示例
<?php declare(strict_types = 1); namespace App\Http\Controllers; use denis660\Centrifugo\Centrifugo; use Illuminate\Support\Facades\Auth; class ExampleController { public function example(Centrifugo $centrifugo) { // Send message into channel $centrifugo->publish('news', ['message' => 'Hello world']); // Generate connection token $token = $centrifugo->generateConnectionToken((string)Auth::id(), 0, [ 'name' => Auth::user()->name, ]); // Generate private channel token $apiSign = $centrifugo->generatePrivateChannelToken((string)Auth::id(), 'channel', time() + 5 * 60, [ 'name' => Auth::user()->name, ]); //Get a list of currently active channels. $centrifugo->channels(); //Get channel presence information (all clients currently subscribed on this channel). $centrifugo->presence('news'); } }