nekudo / angela
基于ZeroMQ的PHP工作进程/微服务框架。
v2.0.0
2017-01-08 15:29 UTC
Requires
- php: >=7.0.0
- ext-zmq: *
- katzgrau/klogger: ^1.2.1
- overnil/event-loop: v0.0.3
- react/child-process: ^0.4.0
- react/zmq: v0.3.0
Suggests
- ext-ev: ~1.0
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();
要求
- PHP >= 7.0
- ZMQ PHP 扩展
- ev PHP 扩展(可选,但推荐以提高性能)
安装
使用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文件。