alexusmai/laravel-centrifugo

laravel 9 和 Centrifugo 4 的 Centrifugo 广播器

1.4 2023-04-14 07:00 UTC

This package is auto-updated.

Last update: 2024-09-14 10:02:03 UTC


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 命名空间

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');

    }
}

可用方法