Laravel - 如何注册自定义广播器

Joh*_*nes 3 php laravel-5.1

我想用BroadcastManager注册一个自定义广播器,而不必更改内部框架代码......

现在我必须在Illuminate\Broadcasting\BroadcasterManager课堂上做这样的事情:

protected function createMyCustomDriver(array $config) {
  // return instance....
}
Run Code Online (Sandbox Code Playgroud)

但是有一种扩展方法,但我不知道它是否适用于这个用例或如何使用它...

目标是使用Broadcaster实现,该实现使用ZMQ将这些广播事件发送到WebSocket php服务器实例.

任何帮助赞赏!

编辑:链接到api doc http://laravel.com/api/5.1/Illuminate/Broadcasting/BroadcastManager.html

edc*_*dcs 10

您需要Illuminate\Broadcasting\BroadcastManager\BroadcastManager使用服务提供商进行扩展.这与添加自定义防护非常相似,但这是一个超级基本示例:

创建一个新的服务提供者,我称之为我的BroadcastServiceProvider,并在boot方法中添加以下内容:

/**
 * Bootstrap the application services.
 *
 * @param BroadcastManager $broadcastManager
 */
public function boot(BroadcastManager $broadcastManager)
{
    $broadcastManager->extend('slack', function (Application $app, array $config) {
        return new Slack;
    });
}
Run Code Online (Sandbox Code Playgroud)

所有这一切就是将你的广播驱动程序(Illuminate\Contracts\Broadcasting\Broadcaster在我的例子中实现接口的类Slack)添加到具有名称的广播管理器slack(你可以调用你喜欢的广播器).

确保将此服务提供程序添加到app.php配置文件中.

然后,在broadcasting.php配置文件中添加新驱动程序作为连接.我看起来像这样:

'connections' => [

    'pusher' => [
        'driver' => 'pusher',
        'key' => env('PUSHER_KEY'),
        'secret' => env('PUSHER_SECRET'),
        'app_id' => env('PUSHER_APP_ID'),
    ],

    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
    ],

    'log' => [
        'driver' => 'log',
    ],

    'slack' => [
        'driver' => 'slack'
    ]

],
Run Code Online (Sandbox Code Playgroud)

您会注意到驱动程序名称与服务提供程序extend调用中的名称相同.您可以实际调用任何您喜欢的连接,并且可以添加额外的参数,如果需要,可以将这些参数传递给服务提供者.

之后,您的自定义广播器已注册并可以使用!