searcher.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. declare(strict_types=0);
  3. define('APP_ID','search');
  4. define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
  5. define('BASE_PATH', BASE_ROOT_PATH . '/helper');
  6. require_once(BASE_ROOT_PATH . '/global.php');
  7. require_once(BASE_ROOT_PATH . '/fooder.php');
  8. require_once(BASE_HELPER_PATH . '/event_looper.php');
  9. require_once(BASE_HELPER_PATH . '/search/processor.php');
  10. require_once(BASE_HELPER_PATH . '/search/util.php');
  11. require_once(BASE_HELPER_PATH . '/category_helper.php');
  12. require_once(BASE_HELPER_PATH . '/brand_helper.php');
  13. require_once(BASE_HELPER_PATH . '/goods/commonid_helper.php');
  14. require_once(BASE_HELPER_PATH . '/search/searcher.php');
  15. require_once(BASE_HELPER_PATH . '/special_helper.php');
  16. require_once(BASE_HELPER_PATH . '/search/area_library.php');
  17. require_once(BASE_HELPER_PATH . '/brand_helper.php');
  18. require_once(BASE_HELPER_PATH . '/algorithm.php');
  19. require_once(BASE_HELPER_PATH . '/message/msgstates.php');
  20. require_once(BASE_HELPER_PATH . '/message/msgutil.php');
  21. require_once(BASE_HELPER_PATH . '/message/subscriber.php');
  22. function handle_error($level, $message, $file, $line)
  23. {
  24. if($level == E_NOTICE) return;
  25. $trace = "handle_error: level={$level},msg={$message} file={$file},line={$line}\n";
  26. $backtrace = debug_backtrace();
  27. foreach ($backtrace as $item) {
  28. $trace .= "{$item['file']}\t{$item['line']}\t{$item['function']}\n";
  29. }
  30. Log::record($trace,Log::ERR);
  31. }
  32. set_error_handler('handle_error');
  33. function all_channels() {
  34. return ['searcher'];
  35. }
  36. $gMessageStates = null;
  37. function searchwork($sockfd)
  38. {
  39. $pid = posix_getpid();
  40. Log::record("seracher worker child process {$pid} is starting....",Log::DEBUG);
  41. try
  42. {
  43. global $gMessageStates;
  44. $gMessageStates = new MsgStates();
  45. Base::run_util();
  46. StatesHelper::init();
  47. $listener = new message\subscriber($gMessageStates);
  48. $listener->start();
  49. search\area_library::instance();
  50. if(StatesHelper::fetch_state('init')) {
  51. Log::record("StatesHelper::fetch_state first.",Log::DEBUG);
  52. search\searcher::instance()->init();
  53. }
  54. process_looper::instance()->init(new search\processor());
  55. process_looper::instance()->add_listen($sockfd);
  56. process_looper::instance()->run_loop();
  57. }
  58. catch (Exception $ex)
  59. {
  60. Log::record("Exception {$ex->getMessage()}",Log::ERR);
  61. }
  62. Log::record("child {$pid} searchwork quit",Log::DEBUG);
  63. exit(0);
  64. }
  65. global $config;
  66. $host = '0.0.0.0';
  67. $port = $config['searcher']['port'];
  68. $listen_fd = event\util::listen($host,$port);
  69. if($listen_fd === false) {
  70. Log::record("cannot open listen socket = {$host}:{$port}",Log::DEBUG);
  71. return false;
  72. }
  73. $count = 1;
  74. event\util::fork_listenex($listen_fd,'searchwork',$count);
  75. socket_close($listen_fd);
  76. Log::record("searchwork all child process quit.");