room_srv.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. require_once(BASE_ROOT_PATH . '/helper/room/bargain_manager.php');
  22. function search_work($sockfd)
  23. {
  24. Base::run_util();
  25. room\room_server::instance()->init(new room\room_processor());
  26. room\room_server::instance()->run_loop($sockfd);
  27. }
  28. function fork_subprocess($count,$listen_fd)
  29. {
  30. if (($pid = pcntl_fork()) === 0)
  31. {
  32. //ob_end_clean(); // Discard the output buffer and close
  33. fclose(STDIN); // Close all of the standard
  34. fclose(STDOUT); // file descriptors as we
  35. fclose(STDERR); // are running as a daemon.
  36. Log::record("pid = {$pid} count = {$count} ",Log::DEBUG);
  37. search_work($listen_fd);
  38. exit();
  39. }
  40. elseif($pid === -1)
  41. {
  42. Log::record("pid = {$pid} count = {$count} ",Log::DEBUG);
  43. die('could not fork');
  44. }
  45. else
  46. {
  47. Log::record("pid = {$pid} count = {$count} ",Log::DEBUG);
  48. $ret = pcntl_waitpid($pid,$status,WNOHANG);
  49. if($ret == 0) {
  50. Log::record("spawn-fcgi: successful ret == 0 PID: {$pid}",Log::DEBUG);
  51. }
  52. elseif($ret == -1) {
  53. Log::record("spawn-fcgi: ret == 0 PID: {$pid}",Log::DEBUG);
  54. }
  55. else {
  56. Log::record("spawn-fcgi: ret == 0 child exited PID: {$pid}.",Log::DEBUG);
  57. }
  58. }
  59. }
  60. global $config;
  61. $host = $config['room_srv']['host'];
  62. $port = $config['room_srv']['port'];
  63. $listen_fd = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  64. if(!socket_set_option($listen_fd, SOL_SOCKET, SO_REUSEADDR, 1)) {
  65. echo "socket_set_option 地址重用失败.\n";
  66. }
  67. if(!socket_set_nonblock($listen_fd)) {
  68. $err = socket_last_error();
  69. Log::record("socket_set_blocking error : {$err}",Log::DEBUG);
  70. }
  71. if(!socket_bind($listen_fd, $host, $port)) {
  72. echo "无法创建socket,请退出之前进程.\n";
  73. return;
  74. }
  75. if(!socket_listen($listen_fd)) {
  76. echo "无法创建socket,请退出之前进程.\n";
  77. return;
  78. }
  79. $count = 1;
  80. while ($count-- > 0) {
  81. fork_subprocess($count,$listen_fd);
  82. }
  83. //search_work($sockfd);