laravels是一个插件,用于快速集成swoole到laravel,然后赋予他们更好的性能。
环境要求
PHP >= 5.5.9
Swoole >= 1.7.19
larael >= 5.1
环境查看:
php -v
cc -v
openssl version
php --ri swoole
安装swoole
sudo wget https://github.com/swoole/swoole-src/archive/v4.0.4.zip
sudo unzip v4.0.4.zip
*** 如果没有unzip,先安装 sudo apt install unzip 再 sudo unzip v4.0.4.zip
cd swoole-src-4.0.4 (进入解压包)
sudo phpize
***如果没有phpize 先安装 sudo apt-get install php7.1-dev 再 sudo phpize
sudo ./configure
sudo make
sudo make install
安装成功后,在php中加入so
位置 /etc/php/7/1/cli/php.ini
添加配置 extension=swoole.so
检查版本 php --ri swoole
1.在你的laravel项目的根目录下执行
composer require "hhxsv5/laravel-s:~3.0" -vvv
2.注册Service Provider
Laravel 修改文件config/app.php,laravel5.5+支持包自动发现,你应该跳过这步
'providers' => [
Hhxsv5\LaravelS\Illuminate\LaravelSServiceProvider::class,
],
3.发布配置文件,每次升级LaravelS后,建议重新发布一次配置文件
php artisan laravels publish
4.修改配置config/laravels.php:监听的IP、端口等。
5.运行
php artisan laravels {start|stop|restart|reload|publish}
命令 | 说明 |
---|---|
start | 启动LaravelS,展示已启动的进程列表 ps -ef |
stop | 停止LaravelS |
restart | 重启LaravelS |
reload | 平滑重启所有worker进程,这些worker进程内包含你的业务代码和框架(Laravel/Lumen)代码,不会重启master/manger进程 |
publish | 发布配置文件到你的项目中config/laravels.php |
首先,用laravel指令创建job
php artisan make:job Test
然后,修改接口
<?php
namespace App\Jobs;
use Hhxsv5\LaravelS\Swoole\Task\Task;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class Test extends Task
{
//处理任务数据
private $data;
//任务处理结果
private $result;
public $delay;
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instanceH
*
* @return void
*/
public function __construct($data)
{
//
$this->data=$data;
}
/**
* Execute the job.
*
* @return void
*/
// 处理任务的逻辑,运行在Task进程中,不能投递任务
public function handle()
{
//
var_dump(self::class);
echo "待处理的异步任务$this->data".PHP_EOL;
sleep(5); // 模拟一些慢速的慢速的处理
// 此处抛出的异常会被上层捕获并记录到Swoole日志,开发者需要手动try/catch
$this->result='result of'.$this->data.'操作结果';
return '123';
}
public function finish(){
return "操作完成的结果$this->result".PHP_EOL;
}
}
最后路由调用,
Route::get('aaa',function (){
$task = new App\Jobs\Test('测试winner异步任务');
$suceess = Hhxsv5\LaravelS\Swoole\Task\Task::deliver($task);
//异步投递任务,出发调用任务类的handle方法
var_dump($suceess);
});
首先确定config下面的laravels配置问题
'swoole' => [
'daemonize' => env('LARAVELS_DAEMONIZE', false),
'dispatch_mode' => env('LARAVELS_DISPATCH_MODE', 2),
'reactor_num' => env('LARAVELS_REACTOR_NUM', function_exists('swoole_cpu_num') ? swoole_cpu_num() : 8),
'worker_num' => env('LARAVELS_WORKER_NUM', function_exists('swoole_cpu_num') ? swoole_cpu_num() * 4 : 8),
//异步任务处理能力
'task_worker_num' => env('LARAVELS_TASK_WORKER_NUM', function_exists('swoole_cpu_num') ? swoole_cpu_num() * 4 : 8),
'task_ipc_mode' => 1,
'task_max_request' => env('LARAVELS_TASK_MAX_REQUEST', 100000),
'task_tmpdir' => @is_writable('/dev/shm/') ? '/dev/shm' : '/tmp',
'max_request' => env('LARAVELS_MAX_REQUEST', 100000),
'open_tcp_nodelay' => true,
'pid_file' => storage_path('laravels.pid'),
'log_level' => 4,
'log_file' => storage_path(sprintf('logs/swoole-%s.log', date('Y-m'))),
'document_root' => base_path('public'),
'buffer_output_size' => 2 * 1024 * 1024,
'socket_buffer_size' => 8 * 1024 * 1024,
'package_max_length' => 4 * 1024 * 1024,
'reload_async' => true,
'max_wait_time' => 60,
'enable_reuse_port' => true,
'enable_coroutine' => false,
'upload_tmp_dir' => @is_writable('/dev/shm/') ? '/dev/shm' : '/tmp',
'http_compression' => false,
],
再来是,确认修改代码后是否有重启laravels。有其他错误可以留言我哦!!!!