bonch.dev / laravel-centrifugo
Centrifugo 广播器适用于 laravel 6.20.26-8 和 Centrifugo >= 2.8.1
2.3.0
2022-02-15 14:10 UTC
Requires
- php: ^7.3|^8.0
- guzzlehttp/guzzle: ~6.0|^7.0
- laravel/framework: ^7.30.4|8.*|9.*
Requires (Dev)
- orchestra/testbench: ^3.7
- phpunit/phpunit: ^6||^7||^8||^9
README
文档 EN | RU
Laravel + Centrifugo
Centrifugo 广播驱动程序适用于 Laravel 7.30.4 - 9
简介
基于 LaraComponents/centrifugo-broadcaster 的 laravel Centrifugo 广播器
特性
- 兼容最新的 Centrifugo 3.1.0 🚀
- 基于 Centrifugo HTTP API 🔌
- 使用 JWT 令牌(HMAC 算法)进行身份验证,用于匿名用户、认证用户和私有频道 🗝️
要求
- PHP >= 7.3 , 8.0, 8.1
- Laravel 7.30.4 - ^9.0
- guzzlehttp/guzzle 6 - 7
- Centrifugo 服务器 3.1.0 或更高版本(见 此处)
安装
使用 composer 需要此包
composer req denis660/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)
],
您还应该在 .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
别忘了更改 .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');
}
}
可用方法
名称 | 描述 |
---|---|
publish(string $channel, array $data, $skipHistory = false) | 向频道发送消息。 |
broadcast(array $channels, array $data, $skipHistory = false) | 向多个频道发送消息。 |
presence(string $channel) | 获取频道存在信息(当前订阅此频道的所有客户端)。 |
presenceStats(string $channel) | 以简短形式获取频道存在信息(客户端数量)。 |
history(string $channel, $limit = 0, $since = [], $reverse = false) | 获取频道历史信息(发送到频道的最后一条消息列表)。 |
historyRemove(string $channel) | 删除频道历史信息。 |
subscribe(string $channel, string $user, $client = '') | 从频道订阅用户。 |
unsubscribe(string $channel, string $user, string $client = '') | 从频道取消订阅用户。 |
disconnect(string $user_id) | 通过其 ID 断开用户。 |
channels(string $pattern = '') | 获取频道信息(当前活动频道的列表)。 |
info() | 获取运行服务器节点的统计信息。 |
generateConnectionToken(string $userId = '', int $exp = 0, array $info = [], array $channels = []) | 生成连接令牌。 |
generatePrivateChannelToken(string $client, string $channel, int $exp = 0, array $info = []) | 生成私有频道令牌。 |
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 [许可证文件](https://github.com/denis660/laravel-centrifugo/blob/master/LICENSE)。