PHP开发工具MultiWorker、PhpBoot、PHP 7.0-LevelDB、request2doc介绍

以下为你介绍的PHP开发工具都可用在Linux系统上:MultiWorker(PHP 多进程管理器)、PhpBoot(快速开发 RESTful 接口的框架)、PHP 7.0-LevelDB(PHP7 LevelDB 扩展)、request2doc(生成 API 说明文档)。

1、MultiWorker(PHP 多进程管理器)

PHP开发工具MultiWorker、PhpBoot、PHP 7.0-LevelDB、request2doc介绍

Multiworker是纯PHP实现的多进程管理器,使用master-worker进程模型,适用于命令行下的多进程调度、并发处理、工作进程崩溃自动恢复、单实例限制。

一、特点:

使用master-worker进程模型,稳定可靠。 Multiworker运行实例由一个master进程(称为主进程)、多个Worker进程(称为工作进程或子进程)组成,主进程主要工作进程的生成、和退出状态监测。一旦有工作进程异常退出,主进程就会立即再生成一个工作进程,接替其继续工作。因为主进程不参与具体业务逻辑,几乎没有异常退出的可能。

轻量级、无外部依赖。只有一个类文件、可适用用于任何项目和框架。

支持单实例功能,配合crontab可实现高可靠性的后台任务。 实际业务中,我们往往希望一个任务由单实例运行,只有前一个实例异常退出时,新的实例才能成功运行,结合crontab和Multiworker的单实例功能,可以很容易实现一个高可靠的后台任务。

并发任务调度处理。不同的工作进程可负责不同的任务处理,相比单进程可极大提高整体任务处理效率。

工作进程状态监测。当工作进程以指定的正常状态退出后,主进程不会再生产新的子进程,当所有工作进程以指定的正常状态退出时,主进程认为任务处理完毕,自己同时退出。

信号控制和进程运行控制。实例在运行中,向主进程发送SIGTERM信号时,主进程会向每个子进程发送信号,告知其及时退出,当所有工作进程退出后,主进程也退出。

二、环境要求

因为使用Linux信号控制,需要posix扩展,只支持Linux类系统,不支持windows。

需要php 5.3+。

三、注意事项

工作进程可以共用一个数据库连接资源吗?

绝对不能,每个工作进程必须重新建立一个数据库连接,否则会引发不可意料的结果。可以在onWorkerStart回调中关闭主进程已经建立的数据库连接,再重新打开即可。

如何实现不同的工作进程执行不同的任务?

onWorkerStart回调的参数,就是进程的PIN(process index number),它从0开始编号,可以通过判断PIN从而让子进程完成不同的任务。

可靠性如何?

久经生产环境实际长久运行,请放心使用。

下载地址:https://gitee.com/mirrors/multiworker

2、PhpBoot(快速开发 RESTful 接口的框架)

PhpBoot 是为快速开发 RESTful API 设计的 PHP 框架。它可以帮助开发者更聚焦在业务本身,而将原来开发中不得不做,但又重复枯燥的事情丢给框架,比如编写接口文档、参数校验和远程调用代码等。

特色:

PhpBoot 框架提供许多主流的特性,如 ORM、依赖注入等。这些特性都经过精心设计和选择(有些是第三方开源代码,如 PHP-DI),但和其他框架相比较,PhpBoot 最显著的特色是:

1].以面向对象的方式编写接口

你肯定看到过这样的代码:

// **不用** PhpBoot 的代码

class BookController

{

public function findBooks(Request $request)

{

$name = $request->get('name');

$offset = $request->get('offset', 0);

$limit = $request->get('limit', 10);

...

return new Response(['total'=>$total, 'data'=>$books]);

}

public function createBook(Request $request)

...

}

很多主流框架都需要用类似代码编写接口。但这种代码的一个问题是,方法的输入输出隐藏在实现里,这不是通常我们提倡的编码方式。如果你对代码要求更高,你可能还会实现一层 Service 接口,而在 Controller 里只是简单的去调用 Service 接口。而使用 PhpBoot,你可以用更自然的方式去定义和实现接口。上面的例子,在 PhpBoot 框架中实现是这样的:

/**

* @path /books/

*/

class Books

{

/**

* @route GET /

* @return Book[]

*/

public function findBooks($name, &$total=null, $offset=0, $limit=10)

{

...

$total = ...

return $books;

}

/**

* @route POST /

* @param Book $book {@bind request.request} bind $book with http body

* @return string id of created book

*/

public function createBook(Book $book)

{

$id = ... 

return $id;

}

}

上面两份代码执行的效果是一样的。可以看到 PhpBoot 编写的代码更符合面向对象编程的原则,以上代码完整版本请见phpboot-example。    

2]. 轻松支持 Swagger

Swagger 是目前最流行的接口文档框架。虽然很多框架都可以通过扩展支持Swagger,但一般不是需要编写很多额外的注释,就是只能导出基本的路由信息,而不能导出详细的输入输出参数。而 PhpBoot 可以在不增加额外编码负担的情况下,轻松去完成上述任务,下图为 findBooks 对应的文档。

PHP开发工具MultiWorker、PhpBoot、PHP 7.0-LevelDB、request2doc介绍

3].简单易用的分布式支持

使用 PhpBoot 可以很简单的构建分布式应用。通过如下代码,即可轻松远程访问上面示例中的 Books 接口:

$books = $app->make(RpcProxy::class, [

'interface'=>Books::class, 

'prefix'=>'http://x.x.x.x/'

]);  

$books->findBooks(...);

同时还可以方便的发起并发请求,如:

$res = MultiRpc::run([

function()use($service1){

return $service1->doSomething();

},

function()use($service2){

return $service2->doSomething();

},

]);

4].IDE 友好

IDE 的代码提示功能可以让开发者轻松不少,但很多框架在这方面做的并不好,你必须看文档或者代码,才能知道某个功能的用法。PhpBoot 在一开始就非常注重框架的 IDE 友好性,尽可能让框架保持准确的代码提示。比如下图是 DB 库在 PhpStorm 下的使用:

PHP开发工具MultiWorker、PhpBoot、PHP 7.0-LevelDB、request2doc介绍

主要特性:

基于Annotation的路由定义。

接口参数双向绑定。

Validation。

依赖注入。

DB。

ORM。

自动文档和接口工具。

分布式支持(RPC)。

Hook。

工作流引擎。

安装和配置:

1].安装 composer (已安装可忽略)

curl -s http://getcomposer.org/installer | php

2].安装 PhpBoot

composer require "caoym/phpboot"

3].index.php 加载 PhpBoot

<?php

require __DIR__.'/vendor/autoload.php';

$app = \PhpBoot\Application::createByDefault(__DIR__.'/config/config.php');

$app->loadRoutesFromPath(__DIR__.'/App/Controllers');

$app->dispatch();

下载地址:https://gitee.com/caoyangmin/phpboot

3、PHP 7.0-LevelDB(PHP7 LevelDB 扩展)

LevelDB 是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了。在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计。特别是LSM算法。php7.0-leveldb 是 LevelDB 的php7 扩展版本。

运行环境:

I.兼容php5版本LeveldbDB、LevelDBIterator类或php7.0以上。

II.linux运行环境。

III. leveldb.so,版本1.20。

下载地址:

4、request2doc(生成 API 说明文档)

request2doc-自动根据发送的请求生成 API 说明文档。文档模板可定制,默认为 wiki markup 格式。

Require:

pip install jinja2

wxpython: https://www.wxpython.org/download.php

Usage:

PHP开发工具MultiWorker、PhpBoot、PHP 7.0-LevelDB、request2doc介绍

Example:

python request2doc.py http://any/get/url?key1=value1&key2=value2

python request2doc.py -d "key1=value1&key2=value2" http://any/post/url

Output:

h3.teacher/homework/search

METHOD: GET

----

GET参数:

||Name||Type||Description||

| status | Int |  |

返回字段说明:

||Name||Type||Description||

| a.\* |  | 0\|1 |

| a.\*.a | Float\|Int |  |

| a.\*.b | Int\|String |  |

{code:title=返回JSON样例|collapse=true}

{

"data": {

"a": [

{

"a": 1, 

"b": 2

}, 

{

"a": 1.1, 

"b": "string"

}

]

}, 

"message": "", 

"error_code": 0, 

"success": true

}

{code}

PHP开发工具MultiWorker、PhpBoot、PHP 7.0-LevelDB、request2doc介绍

GUI:

PHP开发工具MultiWorker、PhpBoot、PHP 7.0-LevelDB、request2doc介绍

下载地址:https://github.com/kongxinchi/request2doc

注明

以上就是PHP开发工具MultiWorker、PhpBoot、PHP 7.0-LevelDB、request2doc的介绍内容,这些PHP开发工具都能使用在Linux操作系统中。

栏目相关文章