swoole.php 980 B

12345678910111213141516171819202122232425262728293031323334
  1. <?php
  2. require __DIR__ . '/../vendor/autoload.php';
  3. use App\Container\Logger;
  4. use App\Vega;
  5. App\Error::register();
  6. /**
  7. * 多进程默认开启了协程
  8. * 关闭协程只需关闭 `enable_coroutine` 配置并注释数据库的 `::enableCoroutine()` 即可退化为多进程同步模式
  9. */
  10. $vega = Vega::new();
  11. $http = new Swoole\Http\Server('0.0.0.0', 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP);
  12. $http->on('Request', $vega->handler());
  13. $http->on('WorkerStart', function ($server, $workerId) {
  14. // swoole 协程不支持 set_exception_handler 需要手动捕获异常
  15. try {
  16. // App\Container\DB::enableCoroutine();
  17. } catch (\Throwable $ex) {
  18. App\Error::handle($ex);
  19. }
  20. });
  21. $http->set([
  22. 'worker_num' => swoole_cpu_num() * 4,
  23. 'enable_coroutine' => false,
  24. 'open_tcp_nodelay' => true,
  25. 'max_request' => 0,
  26. 'log_file' => '/dev/null',
  27. 'log_level' => SWOOLE_LOG_ERROR,
  28. ]);
  29. Logger::instance()->info('Start swoole server');
  30. $http->start();