mkiselev / yii2-broadcasting
Websocket broadcasting module
Installs: 188
Dependents: 0
Suggesters: 0
Security: 0
Stars: 10
Watchers: 3
Forks: 5
Language:JavaScript
Type:yii2-extension
Requires
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2024-11-01 19:54:40 UTC
README
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...)
Installation
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.
Application configuration
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'); }, ], ], ], ],
Socket.io server configuration
This module is compilable with laravel-echo-server
Please follow to laravel-echo-server instructions to install and run them.
Usage
Server side
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();
Client side
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); });