vinelab/minion

一个简单的WAMP(Web应用程序消息协议)服务器和命令行工具

v1.4.0 2021-11-17 14:02 UTC

This package is auto-updated.

Last update: 2024-09-17 20:22:51 UTC


README

Build Status

SensioLabsInsight

Minion

一个简化版的WAMP v2协议(Web应用程序消息协议)客户端,带有便捷的命令行工具 - PHP WebSocket变得简单。

基于Thruway的出色工作,Minion将提供简单性和灵活性,只需运行minion run即可快速启动客户端。此外,它还有助于您构建应用程序。有关详细信息,请参阅工作原理

要快速入门,请访问快速入门指南或继续阅读详细文档。或者,您可以查看示例以了解它是如何工作的。

安装

Composer

将以下内容添加到composer.json中的require

"vinelab/minion": "*"

然后运行composer update进行安装。

Laravel Bounties

  • Vinelab\Minion\MinionServiceProvider添加到app.php中的providers数组,您将在项目中获得一个可用的Minion外观。
  • 命令行工具通过artisan提供,作为php artisan minion:run,请参阅CLI
  • 运行php artisan vendor:publish并转到app/config/minion.php来配置您的minion。

配置

配置客户端连接到WAMP路由器时想要使用的连接参数。

路由器

$m = new Minion():
$m->run(['realm' => 'myrealm', 'host' => 'some.host.ws', 'port' => 8182]);

提供者注册

$m = new Minion();
$m->register('ChatProvider');
$m->register('MyApp\Providers\NotificationProvider'):
$m->run();

您还可以将提供者列在配置中,如下所示

$m = new Minion();
$m->run(
    [
        'port'     => 9876,

        'host'     => 'the.host',

        'realm'    => 'somerealm',

        'register' => [
            'ChatProvider',
            'SomeOtherProvider'
            'NotificationProvider',
        ]
    ]
);

在现有应用程序中,重新使用现有的ReactPHP循环可能很有用。您可以像这样传递一个LoopInterface

$loop = React\EventLoop\Factory::create();
$m = new Minion();
$m->run([], $loop);

用法

Minion背后的理念是使用提供者通过注册RPC发布和订阅主题来帮助您构建应用程序并使其准备进行实时通信的扩展。有关RPC和Pub/Sub的更多信息,请参阅WAMP编程简介

工作原理

WAMP是一种定义了处理客户端连接的路由器的协议,您的应用程序是这些客户端之一,应用程序逻辑在您可以使用register($provider)方法将其注册到Minion的提供者中实现的。

考虑以下目录结构

src/
vendor/
start.php
composer.json

提供者类

  • 提供者类是您的应用程序逻辑所在的地方,Minion使用主题前缀作为约定来区分提供者,这通过在您的提供者类中指定protected $prefix = 'topic.prefix.';来实现。

使用点'.'分隔的前缀约定,例如chat.,这将导致主题read变为chat.read

  • 每个提供者类都必须扩展Vinelab\Minion\Provider并实现public function boot()方法,这是进行注册和pub/sub操作的最佳位置。

  • 每个注册或订阅的方法将涉及时接收到$args$data。考虑以下方法

    public function get($args, $data)
    • $args 是从调用传递过来的参数数组
    • $data 是一个 Dictionary 实例,您可以安全地访问属性,例如 $data->something,如果它们不存在,则返回 null 值而不是错误,如 StdClass 对象中的错误。尽管您可以像使用任何其他对象一样使用 $data 变量,但您可以使用 isset($data->prop)empty($data->prop) 来使用它。
  • src/ChatProvider.php

<?php

use Vinelab\Minion\Provider;

class ChatProvider extends Provider
{
    protected $prefix = 'chat.';

    public function boot()
    {
        // will be registered to topic: chat.send
        $this->register('send', 'sendMessage');
    }

    public function sendMessage($args, $data)
    {
        $message = $data->message;

        // store message in the database

        // tell everyone about it
        $this->publish('message', compact('message'));

        // response with the status
        return true;
    }
}
  • start.php
use Vinelab\Minion\Minion;

$m = new Minion;
$m->register('ChatProvider');
$m->run();

闭包作为提供者

  • start.php
require __DIR__.'/vendor/autoload.php'

use Vinelab\Minion\Minion;
use Vinelab\Minion\Client;

// Get a minion instance
$m = new Minion;

$add = function ($x, $y) { return $x + $y; };

// Register a closure provider
$m->register(function (Client $client) use ($add) {

    // register
    $client->register('add', $add);

    // subscribe
    $client->subscribe('some.topic', function ($data) {
        // do things with data
        $data->key;
        $data->other_key;
    });

    // publish
    $client->publish('i.am.here', ['name' => 'mr.minion']);
});

CLI

Minion 内置了一个方便的命令行工具,可以直接从命令行使用。使用 composer 安装后,minion 二进制文件将位于您的 vendor/bin/ 目录中。为了方便起见,您可以运行 export PATH="./vendor/bin:$PATH" 以直接使用 minion run 而不是 ./vendor/bin/minion run

使用 minion list 获取可用命令的列表,以及使用 minion --help [command] 获取每个命令的更多信息。

命令
  • 运行
    • 选项
      • --realm:指定要使用的 WAMP 域
      • --host:指定路由器主机
      • --port:指定路由器端口
      • --register:注册提供者类(可以多次使用)
    • 示例 minion run --realm=chatting --port=9876 --register="ChatProvider" --register="MyApp\Providers\NotificationsProvider"

Crossbar.io

Minion 随附一个最小化的 crossbar.io 配置文件,您可以在 ./vendor/vinelab/minion/.crossbar/config.json 中找到它,并使用它启动 crossbar,运行 crossbar start --cbdir ./vendor/vinelab/minion/.crossbar

要开始使用 Crossbar,请访问 Crossbar.io 快速入门指南

有关 crossbar 的更多信息,请参阅 Crossbar.io 快速入门

贡献

欢迎提交拉取请求!开发包在 composer.jsonrequire-dev 下指定。

  • 使用 ./vendor/bin/phpunit 运行测试
  • 在提交代码之前,必须通过以下命令检查编码标准:./vendor/bin/phpcs --standard=phpcs.xml src
  • 在违规的情况下,使用 ./vendor/bin/php-cs-fixer fix src,这将有助于解决问题

许可

Minion 在 MIT 许可证下分发,请参阅此包中的 LICENSE 文件。