bonch.dev/laravel-centrifugo

Centrifugo 广播器适用于 laravel 6.20.26-8 和 Centrifugo >= 2.8.1

2.3.0 2022-02-15 14:10 UTC

This package is auto-updated.

Last update: 2024-09-15 16:50:30 UTC


README

文档 EN | RU

Laravel + Centrifugo

Centrifugo 广播驱动程序适用于 Laravel 7.30.4 - 9

Build Status Latest Version Quality Score StyleCI Total Downloads Software License

简介

基于 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)。