按照上一篇文章中得步驟安裝後會在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…