Yii2-broadcasting
Websocket broadcasting module, (*1)
, (*2)
This module is made under inspiration of laravel echo and compatible with libraries., (*3)
There are several broadcast tools available for your choice:, (*4)
1) NullBroadcaster Doing nothing, just a stub
2) LogBroadcaster Broadcast events to application log
3) RedisBroadcaster Broadcast by Redis using Pub/Sub feature (required yii2-redis)
4) RatchetBroadcaster (coming soon...)
5) PusherBroadcaster Broadcast by using pusher.com (coming soon...), (*5)
Installation
The preferred way to install this extension is through composer., (*6)
Either run, (*7)
composer require --prefer-dist mkiselev/yii2-broadcasting "*"
or add, (*8)
"mkiselev/yii2-broadcasting": "*"
to the require section of your composer.json
file., (*9)
Application configuration
Configure module for use some broadcaster and configure channels auth callbacks:, (*10)
'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');
},
],
],
],
],
Socket.io server configuration
This module is compilable with laravel-echo-server, (*11)
Please follow to laravel-echo-server instructions to install and run them., (*12)
Usage
Server side
Write your event extended by \mkiselev\broadcasting\events\BroadcastEvent like this:, (*13)
<?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:, (*14)
(new common\models\SignalEvent(['someParam' => 146]))->toOthers()->broadcast();
Client side
Register mkiselev\broadcasting\assets\EchoAsset
import socket.io library https://github.com/tlaverdure/laravel-echo-server#socketio-client-library, (*15)
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);
});