Websocket broadcasting module
This module is made under inspiration of laravel echo and compatible with libraries.
There are several broadcast tools available for your choice:
- NullBroadcaster Doing nothing, just a stub
- LogBroadcaster Broadcast events to application log
- RedisBroadcaster Broadcast by Redis using Pub/Sub feature (required yii2-redis)
- RatchetBroadcaster (coming soon...)
- PusherBroadcaster Broadcast by using pusher.com (coming soon...)
The preferred way to install this extension is through composer.
Either run
composer require --prefer-dist mkiselev/yii2-broadcasting "*"
or add
"mkiselev/yii2-broadcasting": "*"
to the require section of your composer.json
file.
Configure module for use some broadcaster and configure channels auth callbacks:
'bootstrap' => ['broadcasting'],
'modules' => [
'broadcasting' => [
'class' => \mkiselev\broadcasting\Module::class,
'broadcaster' => [
'class' => \mkiselev\broadcasting\broadcasters\RedisBroadcaster::class,
// By default will be used redis application component, but you can configure as you want
'redis' => [
'class' => \yii\redis\Connection::class,
],
// Configure auth callback for private and presitance chanells
'channels' => [
'signal' => function (\yii\web\User $user) {
return $user->can('something');
},
],
],
],
],
Configure auth endpoint in urlManager component, by default using 'example.com/broadcasting/auth'
'broadcasting/auth' => '/broadcasting/default/index'
This module is compilable with laravel-echo-server
Please follow to laravel-echo-server instructions to install and run them.
Write your event extended by \mkiselev\broadcasting\events\BroadcastEvent like this:
<?php
namespace common\models;
use mkiselev\broadcasting\channels\PrivateChannel;
use mkiselev\broadcasting\events\BroadcastEvent;
class SignalEvent extends BroadcastEvent
{
public $someParam = 42;
public function broadcastOn()
{
return new PrivateChannel('signal');
}
public function broadcastAs()
{
return 'new';
}
}
And broadcast it somewhere:
(new common\models\SignalEvent(['someParam' => 146]))->toOthers()->broadcast();
Register mkiselev\broadcasting\assets\EchoAsset import socket.io library https://github.com/tlaverdure/laravel-echo-server#socketio-client-library
window.io = io;
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001'
});
Echo.channel('signal')
.listen('.new', function(e) {
console.log(e.someParam);
});