room_srv.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 2017/12/14
  6. * Time: 上午11:53
  7. */
  8. define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
  9. require_once(BASE_ROOT_PATH . '/fooder.php');
  10. require_once(BASE_ROOT_PATH . '/helper/search/srv_base.php');
  11. require_once(BASE_ROOT_PATH . '/helper/room/room_server.php');
  12. require_once(BASE_ROOT_PATH . '/helper/room/room_processor.php');
  13. require_once(BASE_ROOT_PATH . '/helper/room/room_handler.php');
  14. require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
  15. require_once(BASE_ROOT_PATH . '/helper/room/base_room.php');
  16. require_once(BASE_ROOT_PATH . '/helper/room/chatwo_room.php');
  17. require_once(BASE_ROOT_PATH . '/helper/room/group_room.php');
  18. require_once(BASE_ROOT_PATH . '/helper/room/bargain_room.php');
  19. require_once(BASE_ROOT_PATH . '/helper/room/factory.php');
  20. require_once(BASE_ROOT_PATH . '/helper/room/room_client.php');
  21. function search_work($sockfd)
  22. {
  23. Base::run_util();
  24. room\room_server::instance()->init(new room\room_processor());
  25. room\room_server::instance()->run_loop($sockfd);
  26. }
  27. function fork_subprocess($count,$listen_fd)
  28. {
  29. if (($pid = pcntl_fork()) === 0)
  30. {
  31. //ob_end_clean(); // Discard the output buffer and close
  32. fclose(STDIN); // Close all of the standard
  33. fclose(STDOUT); // file descriptors as we
  34. fclose(STDERR); // are running as a daemon.
  35. Log::record("pid = {$pid} count = {$count} ",Log::DEBUG);
  36. search_work($listen_fd);
  37. exit();
  38. }
  39. elseif($pid === -1)
  40. {
  41. Log::record("pid = {$pid} count = {$count} ",Log::DEBUG);
  42. die('could not fork');
  43. }
  44. else
  45. {
  46. Log::record("pid = {$pid} count = {$count} ",Log::DEBUG);
  47. $ret = pcntl_waitpid($pid,$status,WNOHANG);
  48. if($ret == 0) {
  49. Log::record("spawn-fcgi: successful ret == 0 PID: {$pid}",Log::DEBUG);
  50. }
  51. elseif($ret == -1) {
  52. Log::record("spawn-fcgi: ret == 0 PID: {$pid}",Log::DEBUG);
  53. }
  54. else {
  55. Log::record("spawn-fcgi: ret == 0 child exited PID: {$pid}.",Log::DEBUG);
  56. }
  57. }
  58. }
  59. function remote_addr()
  60. {
  61. global $config;
  62. $host = $config['room']['host'];
  63. $port = $config['room']['port'];
  64. return "{$host}:{$port}";
  65. }
  66. $listen_fd = stream_socket_server (remote_addr(), $errno, $errstr);
  67. if($listen_fd == false) {
  68. echo "无法创建socket,请退出之前进程.\n";
  69. }
  70. //$count = 1;
  71. //while ($count-- > 0) {
  72. // fork_subprocess($count,$listen_fd);
  73. //}
  74. search_work($listen_fd);