composer require larahook/simple-centrifugo
Add centrifugo
connection with simple-centrifugo
driver to config/broadcasting.php
'connections' => [
'centrifugo' => [
'driver' => 'simple-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)
],
]
- Add
SimpleCentrifugo
trait to your class - Use method
getConnectionToken
for get connection token - And use method
getSubscriptionToken
for get subscription tokens
use Carbon\Carbon;
use Larahook\SimpleCentrifugo\Trait\SimpleCentrifugo;
class ChannelService
{
use SimpleCentrifugo;
/**
* @param int $userId
* @param Carbon $exp
*
* @return array
*/
public function getConnToken(int $userId, Carbon $exp): array
{
return $this->getConnectionToken($userId, $exp);
}
/**
* @param int $userId
* @param array $channels
* @param Carbon $exp
*
* @return array
*/
public function getSubsToken(int $userId, array $channels, Carbon $exp): array
{
return $this->getSubscriptionToken($userId, $channels, $exp);
}
}
Push message to centrifugo channel via laravel events
namespace App\Events;
use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Auth;
class PersonalEvent implements ShouldBroadcastNow
{
use Dispatchable;
use SerializesModels;
/**
* @param array $message
*/
public function __construct(public array $message) {}
/**
* Get the channels the event should broadcast on.
*
* @return array
*/
public function broadcastOn()
{
return ['personal:#'.Auth::id()];
}
public function broadcastAs()
{
return 'PersonalEvent';
}
}
PersonalEvent::dispatch(['info']);