codispatcher.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. declare(strict_types=0);
  3. define('APP_ID', 'rdispatcher');
  4. define('MOBILE_SERVER',true);
  5. define('SUPPORT_PTHREAD',false);
  6. define('BASE_ROOT_PATH',str_replace('/rdispatcher','',dirname(__FILE__)));
  7. define('BASE_PATH',BASE_ROOT_PATH . '/rdispatcher');
  8. require_once(BASE_ROOT_PATH . '/global.php');
  9. require_once(BASE_ROOT_PATH . '/fooder.php');
  10. require_once(BASE_HELPER_PATH . '/event_looper.php');
  11. require_once(BASE_HELPER_PATH . '/queue/rdispatcher.php');
  12. //require_once(BASE_HELPER_PATH . '/refill/CoRefillFactory.php');
  13. require_once(BASE_HELPER_PATH . '/algorithm.php');
  14. require_once(BASE_PATH . '/processor.php');
  15. require_once(BASE_PATH . '/proxy.php');
  16. //这个可以
  17. //Co::set(['hook_flags' => SWOOLE_HOOK_ALL ^ SWOOLE_HOOK_TCP ^ SWOOLE_HOOK_UDP ^
  18. // SWOOLE_HOOK_FILE ^ SWOOLE_HOOK_UNIX ^
  19. // SWOOLE_HOOK_STREAM_FUNCTION ^
  20. // SWOOLE_HOOK_BLOCKING_FUNCTION ^
  21. // SWOOLE_HOOK_PROC ^
  22. // SWOOLE_HOOK_SLEEP ^
  23. // SWOOLE_HOOK_TLS ^
  24. // SWOOLE_HOOK_SSL
  25. //]);
  26. //这样会导致,curl 协程部分不执行,收不到数据
  27. //Co::set(['hook_flags' => SWOOLE_HOOK_NATIVE_CURL | SWOOLE_HOOK_SOCKETS]);
  28. //这样会导致,redis任何阻塞函数不返回
  29. //Co::set(['hook_flags' => SWOOLE_HOOK_ALL]);
  30. //目前没发现问题
  31. Co::set(['hook_flags' => SWOOLE_HOOK_ALL ^ SWOOLE_HOOK_TCP]);
  32. if (empty($_SERVER['argv'][1])) exit('parameter error');
  33. $count = intval($_SERVER['argv'][1]);
  34. function all_channels() {
  35. return ['refill'];
  36. }
  37. function handle_error($level, $message, $file, $line)
  38. {
  39. if($level == E_NOTICE) return;
  40. $trace = "handle_error: level={$level},msg={$message} file={$file},line={$line}\n";
  41. $backtrace = debug_backtrace();
  42. foreach ($backtrace as $item) {
  43. $trace .= "{$item['file']}\t{$item['line']}\t{$item['function']}\n";
  44. }
  45. Log::record($trace,Log::ERR);
  46. }
  47. function work_proc()
  48. {
  49. Base::run_util();
  50. go(function () {
  51. $redis = new Swoole\Coroutine\Redis;
  52. $ret = $redis->connect('host.docker.internal', 6379);
  53. $key = 'test_cache_data';
  54. $ret = wkcache($key, ["hello world"]);
  55. $data = rkcache($key);
  56. });
  57. set_error_handler('handle_error');
  58. $looper = new processor();
  59. $looper->run();
  60. }
  61. Co\run(function() {
  62. Log::record("start run process",Log::DEBUG);
  63. work_proc();
  64. });
  65. //swoole 和 pthreads 冲突
  66. function corun()
  67. {
  68. Co::set(['hook_flags' => SWOOLE_HOOK_ALL ^ SWOOLE_HOOK_TCP]);
  69. Co\run(function() {
  70. Log::record("start run process",Log::DEBUG);
  71. work_proc();
  72. });
  73. }
  74. //corun();
  75. work_proc();
  76. //event\util::fork_workerex('corun',$count);