PHPackages                             smices/pha-service - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. smices/pha-service

ActiveProject[Framework](/categories/framework)

smices/pha-service
==================

Phalcon + Swoole 无侵入解决方案

692[1 issues](https://github.com/smices/PhaService/issues)PHP

Since Nov 6Pushed 7y ago2 watchersCompare

[ Source](https://github.com/smices/PhaService)[ Packagist](https://packagist.org/packages/smices/pha-service)[ RSS](/packages/smices-pha-service/feed)WikiDiscussions master Synced 3d ago

READMEChangelogDependenciesVersions (1)Used By (0)

PhaService
==========

[](#phaservice)

Phalcon + Swoole 无侵入解决方案
------------------------

[](#phalcon--swoole-无侵入解决方案)

Phalcon有着强大的性能同时又具备完整的MVC模式,
Swoole也具备在Phalcon之外的其他能力,如果把两者无缝的结合,
一定是一个不错的案例.

所以本项目 同时支持 Nginx+Phalcon 与 Swoole+Phalcon,
如果使用Nginx做负载均衡,可以做到无缝衔接,有Nginx+php-fpm的稳定,
同时也能享受Swoole对于API的超高性能.

本案例可以作为系统服务使用, 也可以做Restful开发使用,作为Web使用更是毫无问题.

使用 wrk 做的的压测, 在MBP上的结果:

```
wrk -c10000 -d10s --latency  http://127.0.0.1:8080/testRunning 10s test @ http://127.0.0.1:8080/test
  2 threads and 10000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    38.66ms   50.01ms 266.35ms   81.83%
    Req/Sec    12.97k     1.54k   16.65k    88.17%
  Latency Distribution
     50%   11.53ms
     75%   68.33ms
     90%  116.48ms
     99%  183.72ms
  242375 requests in 10.06s, 36.59MB read
Requests/sec:  24104.01
Transfer/sec:      3.64MB
```

非常不错的结果.

Installation
------------

[](#installation)

\*\* Web服务兼容Nginx+PHP-FPM模式,可以参考Phalcon的Nginx配置.

*依赖*:

> 操作系统:
>
> - Ubuntu 16.04LTS/18.04LTS
>
> PHP 版本:
>
> - PHP: 7.0+, 推荐 7.2或以上
>
> 系统服务:
>
> - Beantalkd 队列处理依赖
>
> PHP 扩展:
>
> - Pdo, Pdo MySQL
> - Phalcon 3.x+
> - Swoole 4.x+
> - Redis
> - Beanspeak ()
> - JWT (手动安装: )
> - libsodium () **php7.2已内置,无需安装**
> - DonkeyId ()

\####初始化

```
composer install -o
```

*开启 HttpServer 服务:*建议使用Nginx做负载均衡,使PHP-FPM可以和Swoole的HttpServer同时提供服务.

```
./web_serve start
```

可以使用`sys/systemd/StdWebServer.GenService.php`可以生成`systemd service`文件, 根据提示安装成服务.

```
cd sys/systemd/
php StdWebServer.GenService.php
```

*开启 WebSocketServer 服务:*

```
./web_socket_serve start
```

可以使用 `sys/systemd/StdWebSocketServer.GenService.php` 可以生成`systemd service`文件, 根据提示安装成服务.

```
cd sys/systemd/
php StdWebSocketServer.GenService.php
```

Configuration
-------------

[](#configuration)

#### 环境配置

[](#环境配置)

在项目的/目录下,建立空文件 `.development` 或 `.testing`则指定里开发环境与测试环境, 没有文件为生产环境. 文件同时存在, 有限开启开发环境.

```
#开发环境
rm .testing && touch .development

#测试环境
rm .development && touch .testing

#生产环境
rm .development .testing

```

#### 数据库,Redis等配置:

[](#数据库redis等配置)

Web与Cli分开配置,配置文件位于:

- App部分: `/app/config/config.php`
- Cli部分: `/cli/config/config.php`

#### Swoole Http Server 配置:

[](#swoole-http-server-配置)

- 配置文件: `/sys/config/std_web_server.php`

#### Swoole WebSocket Server 配置:

[](#swoole-websocket-server-配置)

- 配置文件: `/sys/config/std_web_socket_server.php`

Features
--------

[](#features)

- Phalcon 完整支持
- Http 服务器
- WebSocket 服务器
- 多进程Task Worker 任务处理
- Beantalk 队列
- Systemd自启服务

Documents
---------

[](#documents)

\###使用Composer建立项目 '''bash composer create-project smices/pha-service -s dev '''

\###多进程Task任务处理 该服务会在任务处理完成后,持续拉起服务,所以可以实现类似php-fpm的特点, 任务处理指定次数后退出任务,服务会自动拉起服务.
具体可以参考/cli/tasks/MailSenderTask.php, 复写 RealWork 函数进行真实的任务处理即可, 调用方式:

```
#查看帮助信息
./run mailsender -h

#参数 6 为开启6个子进程同时处理任务
./run mailsender main 6

#查看队列任务数量
./run mailsender info
```

添加数据到邮件队列:

```
