nekudo/angela

基于ZeroMQ的PHP工作进程/微服务框架。

v2.0.0 2017-01-08 15:29 UTC

This package is not auto-updated.

Last update: 2024-09-28 18:28:30 UTC


README

Angela是基于ZeroMQ的PHP工作进程/微服务框架。

典型的Angela应用程序包括一个作业服务器、与服务器通信的客户端以及执行实际工作的工作进程。Angela提供了作业服务器、客户端和API,使您能够轻松实现工作进程。

             +--------+
             | Client |
             +--------+
                 ^   
                 |   
                 v   
           +------------+
           | Job Server |
           +------------+
     +-------^   ^    ^------+
     |           |           |
     |           |           |
     v           v           v
+--------+   +--------+   +--------+
| Worker |   | Worker |   | Worker |
+--------+   +--------+   +--------+

特性

作业服务器

作业服务器是Angela的主要进程。它管理所有工作进程,监听新的作业请求,将这些作业分配给工作进程,并向客户端发送响应。一个服务器可以管理多个工作进程池,因此可以处理各种类型的作业。

作业服务器将启动在项目配置中定义的工作进程。它将监视工作进程,例如,如果工作进程崩溃,将重新启动进程。

它还具有基本的负载均衡功能,因此作业将始终传递给下一个空闲工作进程。

工作进程

Angela提供了一个API,可以轻松构建工作进程。每个工作进程通常执行一种类型的作业(尽管它可以处理多种类型)。然后,您将启动多个工作进程池,以处理应用程序中所需的不同类型的作业。

示例

<?php

class WorkerA extends \Nekudo\Angela\Worker
{
    public function taskA(string $payload) : string
    {
        // Do some work:
        sleep(1);

        // Return a response (needs to be string!):
        return strrev($payload);
    }
}

// Create new worker and register jobs:
$worker = new WorkerA;
$worker->registerJob('taskA', [$worker, 'taskA']);
$worker->run();

客户端

客户端是一个简单的类,允许您向服务器发送命令或作业请求。它可以发送命令、普通作业或后台作业。

普通作业是阻塞的,因为客户端将等待响应。然而,后台作业是非阻塞的。它们将由服务器处理,但客户端不需要等待响应。

示例

<?php
$client = new \Nekudo\Angela\Client;
$client->addServer('tcp://127.0.0.1:5551');
$result = $client->doNormal('taskA', 'some payload'); // result is "daolyap emos"
$client->close();

要求

安装

使用composer

composer require nekudo/angela

文档

请参阅 "example" 文件夹中的示例应用程序。以下是最重要的文件和命令:

  • config.php: 包含服务器和工作进程池所需的所有必要配置。
  • control.php: 一个简单的控制脚本,用于启动/停止/重启服务器和工作进程。可用命令包括:
    • php control.php start
    • php control.php stop
    • php control.php restart
    • php control.php status
    • php control.php kill
    • php control.php flush-queue
  • client.php: 一个示例客户端,向作业服务器发送作业。
  • worker/*.php: 所有处理实际作业的工作脚本。

许可

在MIT许可条款下发布。有关详细信息,请参阅LICENSE文件。