mkiselev/yii2-broadcasting

WebSocket广播模块

安装次数: 187

依赖项: 0

建议者: 0

安全: 0

星标: 10

关注者: 3

分支: 5

语言:JavaScript

类型:yii2-extension

0.0.2 2017-07-16 22:20 UTC

This package is not auto-updated.

Last update: 2024-09-20 19:19:53 UTC


README

WebSocket广播模块

Latest Stable Version Total Downloads Latest Unstable Version License Monthly Downloads

本模块受laravel echo启发,并兼容库。

有几种广播工具可供选择

  1. NullBroadcaster 不做任何事情,只是一个占位符
  2. LogBroadcaster 将事件广播到应用程序日志
  3. RedisBroadcaster 使用Redis的Pub/Sub功能进行广播(需要yii2-redis
  4. RatchetBroadcaster(即将推出...)
  5. PusherBroadcaster 使用pusher.com进行广播(即将推出...)

安装

安装此扩展的首选方法是通过 composer

运行

composer require --prefer-dist mkiselev/yii2-broadcasting "*"

或添加

"mkiselev/yii2-broadcasting": "*"

到您的 composer.json 文件的require部分。

应用程序配置

配置模块以使用某些广播器和配置通道认证回调

'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服务器配置

此模块可与 laravel-echo-server 兼容

请按照laravel-echo-server的说明进行安装和运行。

使用方法

服务器端

编写您的事件,扩展自 \mkiselev\broadcasting\events\BroadcastEvent,如下所示

<?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';
    }
}

并在某处广播它

(new common\models\SignalEvent(['someParam' => 146]))->toOthers()->broadcast();

客户端

注册 mkiselev\broadcasting\assets\EchoAsset,导入socket.io库 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);
    });

变更日志