TP6+Swoole4 配置詳解

配置詳解

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

能夠看到須要咱們使用服務器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 能夠用於多進程之間共享數據;
    • 使用行鎖,而不是全局鎖,僅當 2 個進程在同一 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…

相關文章
相關標籤/搜索