按照上一篇文章中得步骤安装后会在config
目录下增长config\swoole.php
配置文档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,
],
],
//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的开发文档
];
复制代码
里面有诸多得配置下面会把须要注意得几个地方详细讲解html
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,//是否守护进程
],
],
];
复制代码
server.host默认配置为127.0.0.1
,须要外网访问调试的使用这里要监听0.0.0.0
react
能够看到须要咱们使用服务器ip+端口号进行访问,注意这样访问须要开启端口web
return [
//热更新配置 'hot_update' => [
//是否开启热更新
'enable' => env('APP_DEBUG', false),
//监听文件得类型 例如:*.html / *.js 都是能够得,但这个配置已经够用了不须要再调整
'name' => ['*.php'],
//监听的目录 目前监听得目录有:app\ crmeb\
'include' => [app_path(), root_path('crmeb')],
//排除的目录
'exclude' => [],
],
]
复制代码
主要使用再开发阶段时使用,不用频繁的手动执行重启命令,建议再生产模式下关闭debug运行redis
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
能够用于多进程之间共享数据;CPU
时间,并发读取同一条数据才会进行发生抢锁。单看第一条就以为牛*服务器
配置可参考上述配置websocket
使用:
use use think\swoole\Table;
use Swoole\Table as SwooleTable;
/** @var SwooleTable $table */
$table = app()->make(Table::class)->get('user');
复制代码
返回的$table
就可使用swoole\Table
的方法了,详细使用文档可参考:wiki.swoole.com/#/memory/ta…