All Projects → tsingsun → Yii2 Swoole

tsingsun / Yii2 Swoole

Licence: bsd-3-clause
make yii2 project runing on swoole

Projects that are alternatives of or similar to Yii2 Swoole

Swoft Db
[READ ONLY] Database Compoment for Swoft
Stars: ✭ 25 (-84.47%)
Mutual labels:  coroutine, swoole
Php Coroutine Engine
This project for php-fpm support coroutine
Stars: ✭ 74 (-54.04%)
Mutual labels:  coroutine, swoole
Saber
⚔️ Saber, PHP异步协程HTTP客户端 | PHP Coroutine HTTP client - Swoole Humanization Library
Stars: ✭ 866 (+437.89%)
Mutual labels:  coroutine, swoole
Swoft
🚀 PHP Microservice Full Coroutine Framework
Stars: ✭ 5,420 (+3266.46%)
Mutual labels:  coroutine, swoole
Archer
基于协程Swoole的Task组件,支持多种模式。轻松实现协程Task的队列、并发、Defer、计时器等 | Swoole coroutine task kit - Swoole Humanization Library
Stars: ✭ 132 (-18.01%)
Mutual labels:  coroutine, swoole
Imi
imi 是基于 Swoole 的 PHP 协程开发框架,它支持 Http、Http2、WebSocket、TCP、UDP、MQTT 等主流协议的服务开发,特别适合互联网微服务、即时通讯聊天im、物联网等场景!。QQ群:17916227
Stars: ✭ 680 (+322.36%)
Mutual labels:  coroutine, swoole
Swoft Framework
[READ ONLY] Swoft Framework, base of Swoft
Stars: ✭ 70 (-56.52%)
Mutual labels:  coroutine, swoole
Yurunoauthlogin
PHP 第三方登录授权 SDK,集成了QQ、微信、微博、Github等常用接口。支持 php-fpm 和 Swoole,所有框架通用。QQ群:17916227
Stars: ✭ 330 (+104.97%)
Mutual labels:  coroutine, swoole
Mix
☄️ PHP CLI mode development framework, supports Swoole, WorkerMan, FPM, CLI-Server / PHP 命令行模式开发框架,支持 Swoole、WorkerMan、FPM、CLI-Server
Stars: ✭ 1,753 (+988.82%)
Mutual labels:  coroutine, swoole
Yii2 Swoole
full solutions making yii2-framework run on swoole with coroutine.
Stars: ✭ 86 (-46.58%)
Mutual labels:  coroutine, swoole
Cms
Feehi CMS based on yii2
Stars: ✭ 493 (+206.21%)
Mutual labels:  yii2, swoole
Aint Queue
🚀 An async-queue library built on top of swoole, flexable multi-consumer, coroutine supported. 基于 Swoole 的一个异步队列库,可弹性伸缩的工作进程池,工作进程协程支持。
Stars: ✭ 143 (-11.18%)
Mutual labels:  coroutine, swoole
Easyswoole
swoole,easyswoole,swoole framework
Stars: ✭ 4,409 (+2638.51%)
Mutual labels:  coroutine, swoole
Paysdk
PHP 集成支付 SDK ,集成了支付宝、微信支付的支付接口和其它相关接口的操作。支持 php-fpm 和 Swoole,所有框架通用。宇润PHP全家桶技术支持群:17916227
Stars: ✭ 723 (+349.07%)
Mutual labels:  coroutine, swoole
Hyperf
🚀 A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease.
Stars: ✭ 4,206 (+2512.42%)
Mutual labels:  coroutine, swoole
Swpdo
Swoole Coroutine SQL component like PDO | 0成本迁移PDO到Swoole高性能协程客户端
Stars: ✭ 64 (-60.25%)
Mutual labels:  coroutine, swoole
Simps
🚀 A simple, lightweight and high-performance PHP coroutine framework.
Stars: ✭ 318 (+97.52%)
Mutual labels:  coroutine, swoole
Shadowfax
Run Laravel on Swoole.
Stars: ✭ 325 (+101.86%)
Mutual labels:  coroutine, swoole
Ycsocket
基于swoole的socket框架,支持协程版MySQL、Redis连接池,已用于大型RPG游戏服务端
Stars: ✭ 77 (-52.17%)
Mutual labels:  coroutine, swoole
Swoole Docker
See: https://github.com/swoole/docker-swoole
Stars: ✭ 132 (-18.01%)
Mutual labels:  coroutine, swoole

关于 Yii2 Swoole

Latest Stable Version Build Status Total Downloads

本项目是基于php-swoole扩展协程版本,使yii2项目运行在swoole上的一个方案.
通过本项目扩展,可极大的提高原项目并发性.而且可以通过Yii2的全栈框架开发TCP,UDP,WebSocket等网络服务.

基于Swoole4版本后,协程的切换更方便了,也使代码中不需要再使用call_user_func替换.yii2-swoole的适应能力越来越强了.

主版本

  • Yii 2.0.14以上
  • swoole 4.2以上

安装

swoole4请直接使用

    composer require tsingsun/yii2-swoole

如果您使用的是swoole2版本请使用1.0版本

特点

  • 高度兼容Yii2项目,不需要改变项目代码.
  • 一行代码切换协程和非协程环境的支持
  • 编写启动脚本,即可享受swoole + 协程带来的高性能的并发服务.
  • 运行内存表现稳定.
  • 本地化mysql,redis连接池(协程环境下,非协程链接池意义不大). 文档
  • 实现了在swoole下的session功能.

使用方法

  • swoole启动文件
    启动文件为服务启动脚本,根据不同的服务类型定制,也可以根据业务来定制,具体请查看运行方式中的各服务器说明.
    协程与非协程的切换也在启动脚本中.
use \tsingsun\swoole\server\Server;
//站点根目录,相当于nginx的root配置
defined('WEBROOT') or define('WEBROOT', __DIR__);
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
//协程开关,请严格根据您的环境配置
defined('COROUTINE_ENV') or define('COROUTINE_ENV', true);

require(__DIR__ . '/../../vendor/autoload.php');
$config = [
    'class'=>'tsingsun\swoole\server\HttpServer',
    //Swoole的配置,根据实际情况配置
    'setting' => [
        'daemonize'=>0,
        'max_coro_num'=>3000,
        'reactor_num'=>1,
        'worker_num'=>1,
        'task_worker_num'=>1,
        'pid_file' => __DIR__ . '/../runtime/testHttp.pid',
        'log_file' => __DIR__.'/../runtime/logs/swoole.log',
        'debug_mode'=> 1,
        'user'=>'tsingsun',
        'group'=>'staff',
        // 4.0 新增选项
        'enable_coroutine' => COROUTINE_ENV
    ],
];

Server::run($config,function (Server $server){
    $starter = new \tsingsun\swoole\bootstrap\WebApp($server);
    //初始化函数独立,为了在启动时,不会加载Yii相关的文件,在库更新时采用reload平滑启动服务器
    $starter->init = function (\tsingsun\swoole\bootstrap\BaseBootstrap $bootstrap) {
        //需要使用Yii-Swoole项目的Yii文件,
        require(__DIR__ . '/vendor/tsingsun/yii2-swoole/src/Yii.php');
        //原项目的配置文件引入
        $config = yii\helpers\ArrayHelper::merge(
            require(__DIR__ . '/../config/main.php'),
            require(__DIR__ . '/../config/main-local.php')
        );        
        $bootstrap->appConfig = $config;
    };
    $server->bootstrap = $starter;
    $server->start();
});
  • cli控制命令
    Usage: php [startScript] [command]
//启动
php http_server.php start
//平滑重启,kill方式,需要root权限, 
php http_server.php reload
//关闭
php http_server.php stop
  • 运行方式

    • HttpServer:把swoole当成http服务器运行.
    • WebSocketServer:[废弃,如需要可直接使用swoole原生,请参考示例配置文件]
    • TCP/UDP Server --TODO
  • 开发调试

    • 仍然可用基于集成环境如XAMPP等进行调试
    • 基于swoole,只需要配置PHP环境,可用XDEBUG,如果是PHPSTORM,在Debug配置swoole运行脚本,点下Debug运行即可.
    • 在OnWorkStart断点时,请求会被阻塞
    • 启用task时,如果断点于task中,则调试请求会被阻塞
    • 如果出现页面信息输出至控制台,一般是被直接echo了,可跟踪各输出出口.

由于swoole2.0以上与xdebug产生冲突(主要是一些协程的客户端类上),导致无法在IDE中调试,比较好的实践应该是在普通PHP环境下开发好,在swoole环境再测试

配合Nginx

Swoole没有像 传统的中间件与Nginx的紧密,部分参数需要自己往HTTP Header写..在传统$_SERVER中的命名方式保留,防止与Header出现命名冲突.

server {
    root /data/wwwroot/;
    server_name local.swoole.com;

    location / {
        proxy_http_version 1.1;
        proxy_set_header Connection "keep-alive";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header SERVER_NAME $server_name;
        if (!-e $request_filename) {
             proxy_pass http://127.0.0.1:9501;
        }
    }
}

受限

原Yii2的部分功能在swoole环境具有一定限制.具体请查阅限制说明文档

请仔细理解swoole的编程需知,请求无响应大部分来源于此.
对于第三方包的call_user_func或call_user_func_array的处理请参考functionReplace.php的处理

改写的组件

为了适应swoole的内存常驻机制,对Yii的一部分组件的进行了改写,尽量的保持用户不产生额外的代码修改,无感迁移.
一些组件的改写说明请参阅组件改写说明

composer问题

Composer的中国镜像存在问题,如果版本获取有问题时,可以用https://packagist.laravel-china.org 然后指定composer.json

    "repositories": [
        {
            "type": "composer",
            "url": "https://asset-packagist.org"
        }
    ],

联系我

QQ: 21997272 Q群: 785966704 如果你觉得对您有帮助,可以请我喝咖啡鼓励下我^_^ 支付宝

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].