TP6+Swoole4配置详解
配置详解
安装后会在config⽬录下增加config\swoole.php配置⽂档
use app\webscoket\Manager;
use Swoole\Table;
use think\swoole\websocket\socketio\Parser;
return [
'server'    => [
// 默认配置为127.0.0.1 如果不需要⽤IP+端⼝访问得话可以不⽤改
'host'      => env('SWOOLE_HOST', '0.0.0.0'), // 监听地址
'port'      => env('SWOOLE_PORT', 29999), // 监听端⼝
'mode'      => SWOOLE_PROCESS, // 运⾏模式默认为SWOOLE_PROCESS
'sock_type' => SWOOLE_SOCK_TCP, // sock type 默认为SWOOLE_SOCK_TCP
'options'  => [
// swoole进程得pid默认配置是在\runtime\swoole.pid
'pid_file'              => root_path() . 'swoole.pid',
// swoole运⾏得⽇志⽬录
'log_file'              => runtime_path() . 'swoole.log',
// 这个配置会影响swoole启动命令后是否进程守护,关闭命令⾏后还能继续运⾏
'daemonize'            => true,//是否守护进程
// Normally this value should be 1~4 times larger according to your cpu cores.
'reactor_num'          => swoole_cpu_num(),
'worker_num'            => swoole_cpu_num(),
'task_worker_num'      => swoole_cpu_num(),
'task_enable_coroutine' => true,
'task_max_request'      => 2000,//设置 task 进程的最⼤任务数
'enable_static_handler' => true,
'document_root'        => root_path('public'),
'package_max_length'    => 20 * 1024 * 1024,
'buffer_output_size'    => 10 * 1024 * 1024,
'socket_buffer_size'    => 128 * 1024 * 1024,
],
],
/
/websocket配置区域
'websocket'  => [
//是否开启websocket
'enable'        => true,
//处理事件类名,这是是根据项⽬⾃⾏写得类,下⾯也会列出类中得⽅法和处理机制
'handler'      => Manager::class,
//解析类可直接使⽤TP6内置得类就可以了
'parser'        => Parser::class,
'ping_interval' => 25000,//ping频率
'ping_timeout'  => 60000,//没有ping后退出毫秒数
//下⾯是⼀些房间得配置这⾥会⾃动创建⼀个⾼性能内存数据库
'room'          => [
//房间类型可切换为redis
'type'  => 'table',
'table' => [
'room_rows'  => 4096,
'room_size'  => 2048,
'client_rows' => 8192,
'client_size' => 2048,
],
'redis' => [
'host'          => '127.0.0.1',
'port'          => 6379,
'max_active'    => 3,
'max_wait_time' => 5,
'max_wait_time' => 5,
],
],
//socket监听得事件也可以在这⾥配置,也可以在app\event.php内配置
'listen'        => [],
'subscribe'    => [],
],
//远程过程调⽤,它是⼀种通过⽹络从远程计算机程序上请求服务,⽽不需要了解底层⽹络技术的思想    //做微服务使⽤项⽬中没有使⽤就不过多说
'rpc'        => [
'server' => [
'enable'  => false,
'port'    => 9000,
'services' => [        ],
],
'client' => [    ],
],
//热更新配置
'hot_update' => [
//是否开启热更新
'enable'  => env('APP_DEBUG', false),
//监听⽂件得类型例如:*.html / *.js 都是可以得,但这个配置已经够⽤了不需要再调整
'name'    => ['*.php'],
//监听的⽬录⽬前监听得⽬录有:app\ crmeb\
'include' => [app_path(), root_path('crmeb')],
//排除的⽬录
'exclude' => [],
],    //连接池
'pool'      => [
//数据库连接池默认是开启的,在使⽤Db或者Model中不需要配置什么就⾃带连接池
'db'    => [
'enable'        => true,
'max_active'    => 3,
'max_wait_time' => 5,
],
//缓存连接池使⽤cache⽅式和之前⼀模⼀样没有任何的区别
'cache' => [
'enable'        => true,
'max_active'    => 3,
'max_wait_time' => 5,
],
//⾃定义连接池
]
,
//内存数据库字段可⾃⾏创建数据库会在swoole启动后⾃⾏创建
'tables' => [
//⾼性能内存数据库
'user' => [
'size' => 2048,
'columns' => [
['name' => 'fd', 'type' => Table::TYPE_INT],
['name' => 'type', 'type' => Table::TYPE_INT],
['name' => 'uid', 'type' => Table::TYPE_INT],
['name' => 'to_uid', 'type' => Table::TYPE_INT],
['name' => 'tourist', 'type' => Table::TYPE_INT]
]
]
],    //还有其他配置不做解释,个⼈⽤的较少,有需求查阅swoole4的开发⽂档
];
复制代码
重要配置讲解
⾥⾯有诸多得配置下⾯会把需要注意得⼏个地⽅详细讲解
端⼝和监听地址
return [
'server'    => [
/
/ 默认配置为127.0.0.1 如果不需要⽤IP+端⼝访问得话可以不⽤改
'host'      => env('SWOOLE_HOST', '0.0.0.0'), // 监听地址
'port'      => env('SWOOLE_PORT', 29999), // 监听端⼝
'mode'      => SWOOLE_PROCESS, // 运⾏模式默认为SWOOLE_PROCESS
'sock_type' => SWOOLE_SOCK_TCP, // sock type 默认为SWOOLE_SOCK_TCP
'options'  => [
// swoole进程得pid默认配置是在\runtime\swoole.pid
'pid_file'              => root_path() . 'swoole.pid',
// swoole运⾏得⽇志⽬录
'log_file'              => runtime_path() . 'swoole.log',
// 这个配置会影响swoole启动命令后是否进程守护,关闭命令⾏后还能继续运⾏
'daemonize'            => true,//是否守护进程
],
],
];
复制代码
php支持多线程吗server.host默认配置为127.0.0.1,需要外⽹访问调试的使⽤这⾥要监听0.0.0.0
可以看到需要我们使⽤服务器ip+端⼝号进⾏访问,注意这样访问需要开启端⼝
热更新
return [
//热更新配置  'hot_update' => [
//是否开启热更新
'enable'  => env('APP_DEBUG', false),
//监听⽂件得类型例如:*.html / *.js 都是可以得,但这个配置已经够⽤了不需要再调整
'name'    => ['*.php'],
//监听的⽬录⽬前监听得⽬录有:app\ crmeb\
'include' => [app_path(), root_path('crmeb')],
//排除的⽬录
'exclude' => [],
],
]
复制代码
主要使⽤再开发阶段时使⽤,不⽤频繁的⼿动执⾏重启命令,建议再⽣产模式下关闭debug运⾏内存数据库
return [
//内存数据库字段可⾃⾏创建数据库会在swoole启动后⾃⾏创建    'tables' => [
//⾼性能内存数据库
'user' => [
'size' => 2048,
'columns' => [
['name' => 'fd', 'type' => Table::TYPE_INT],
['name' => 'type', 'type' => Table::TYPE_INT],
['name' => 'uid', 'type' => Table::TYPE_INT],
['name' => 'to_uid', 'type' => Table::TYPE_INT],
['name' => 'tourist', 'type' => Table::TYPE_INT]
]
]
],
];
复制代码
先来看下官⽅的讲解:
由于 PHP 语⾔不⽀持多线程,因此 Swoole 使⽤多进程模式,在多进程模式下存在进程内存隔离,在⼯作进程内修改 global 全局变量和超全局变量时,在其他进程是⽆效的。
优势:
性能强悍,单线程每秒可读写 200 万次;
应⽤代码⽆需加锁,Table 内置⾏锁⾃旋锁,所有操作均是多线程 / 多进程安全。⽤户层完全不需要考虑数据同步问题;
⽀持多进程,Table 可以⽤于多进程之间共享数据;
使⽤⾏锁,⽽不是全局锁,仅当 2 个进程在同⼀ CPU 时间,并发读取同⼀条数据才会进⾏发⽣抢锁。
单看第⼀条就觉得⽜*
配置可参考上述配置
使⽤:
use use think\swoole\Table;
use Swoole\Table as SwooleTable;
/** @var SwooleTable $table */
$table = app()->make(Table::class)->get('user');
复制代码
返回的$table就可以使⽤swoole\Table的⽅法了,详细使⽤⽂档可参考:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。