alexusmai / laravel-centrifugo
Centrifugo broadcaster for laravel 9 and Centrifugo 4
Installs: 2 929
Dependents: 0
Suggesters: 0
Security: 0
Stars: 8
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- php: ^8.0
- ext-json: *
- guzzlehttp/guzzle: ^7.0
- laravel/framework: ^8.75.0|^9.0|^10.0|^11.0
README
Centrifugo broadcast driver for Laravel
Introduction
Centrifugo broadcaster for laravel , based on:
Features
- Compatible with Centrifugo 4 🚀
- Wrapper over Centrifugo HTTP API 🔌
- Authentication with JWT token (HMAC algorithm) for anonymous, authenticated user and private channel 🗝️
Requirements
- PHP >= 8.0
- Laravel 9.0 - 11
- guzzlehttp/guzzle 7
- Centrifugo Server 4
Installation
Require this package with composer:
composer req alexusmai/laravel-centrifugo
Open your config/app.php and add the following to the providers array:
'providers' => [ // And uncomment BroadcastServiceProvider App\Providers\BroadcastServiceProvider::class, ],
Open your config/broadcasting.php and add new connection like this:
'centrifugo' => [ 'driver' => 'centrifugo', 'token_hmac_secret_key' => env('CENTRIFUGO_TOKEN_HMAC_SECRET_KEY',''), 'api_key' => env('CENTRIFUGO_API_KEY',''), 'url' => env('CENTRIFUGO_URL', 'http://localhost: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:'), ],
Also you should add these two lines to your .env file:
CENTRIFUGO_TOKEN_HMAC_SECRET_KEY=token_hmac_secret_key-from-centrifugo-config
CENTRIFUGO_API_KEY=api_key-from-centrifugo-config
CENTRIFUGO_URL=http://localhost:8000
These lines are optional:
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
Don't forget to change BROADCAST_DRIVER
setting in .env file!
BROADCAST_DRIVER=centrifugo
Basic Usage
To configure Centrifugo server, read official documentation
For broadcasting events, see official documentation of laravel
A simple client usage example:
<?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'); } }