start_gateway_tcp.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. use Workerman\Worker;
  3. use Workerman\Lib\Timer;
  4. use Workerman\Protocols\Http\Response;
  5. use Workerman\Protocols\Http;
  6. define('WORKERNAME', 'WebServer');
  7. // #### http worker ####
  8. $http_worker = new Worker("http://0.0.0.0:8285");
  9. $workerCount = defined('GATEWAY_PROCESSES_COUNT') ? GATEWAY_PROCESSES_COUNT : WEBSERVER_PROCESSES_COUNT;
  10. //// 4 processes
  11. $http_worker->count = $workerCount;
  12. $http_worker->name = 'crazy_god_API_gateway';
  13. // Emitted when data received
  14. $http_worker->onWorkerStart= function($worker){
  15. global $dbs;
  16. global $rediss;
  17. $dbs = oo::commonOprDb('common');
  18. $dbs->connect();
  19. $redisArr =['common','statistics'];
  20. foreach ($redisArr as $v){
  21. $rediss[$v] = oo::commonOprRedis($v);
  22. }
  23. $time_id = Timer::add(5, function () use (&$time_id,$redisArr) {
  24. global $dbs;
  25. global $rediss;
  26. if(!$dbs->ping()){//失败释放内存,重连
  27. echo date('Y-m-d H:i:s').'close-mysql'."\r\n";
  28. $dbs->close();
  29. oo::$objDb =[];
  30. $dbs = oo::commonOprDb('common');
  31. }
  32. foreach ($redisArr as $v){
  33. if(!$rediss[$v]->ping()){//失败释放内存,重连
  34. echo date('Y-m-d H:i:s').'close-redis'."\r\n";
  35. $rediss[$v]->close();
  36. oo::$objRedis =[];
  37. $rediss[$v] = oo::commonOprRedis('common');
  38. }
  39. }
  40. });
  41. require_once WWWROOT . "lib/ProtocolsEvent.php";//解码
  42. require_once WWWROOT . 'api/gateway_new.php';
  43. require_once WWWROOT . 'api/config_new.php';
  44. };
  45. /**
  46. * Notes:
  47. * User: wsc
  48. * Time: 2021/1/19 16:29
  49. * @param $connection
  50. * @param $request Workerman\Protocols\Http\Request
  51. */
  52. $http_worker->onMessage = function($connection, $request)
  53. {
  54. $gets =$request->get();
  55. $posts =$request->post();
  56. $uri = $request->path();
  57. $ips = $request->header('x-forwarded-for');
  58. $ip ='';
  59. if(!empty($ips)){
  60. $ips = explode(',',$ips);
  61. $ip=$ips?$ips[0]:'';
  62. }
  63. $host = $request->header('host');
  64. //get请求
  65. if (isset($gets)&&!empty($gets)) {
  66. $getParams = $gets;
  67. }
  68. //post请求
  69. if (isset($posts)&&!empty($posts)) {
  70. $getParams = $posts;
  71. }
  72. //加密则重置请求参数
  73. if(isset($getParams['param'])&&!empty($getParams['param'])){
  74. $getParams = ProtocolsEvent::apiDecodeNew($getParams['param']);
  75. }
  76. $getParams['from_ip'] = $ip;
  77. $getParams['from_host'] = $host;
  78. if(in_array($uri, ['/api/config.php', '/api/config_crazy.php'])){
  79. $ret = (new ConfigNew)->start($getParams);
  80. }else{
  81. $ret = (new GatewayNew)->start($getParams);
  82. }
  83. if(is_array($ret)){
  84. $ret = json_encode($ret,32);
  85. }
  86. $response = new Response(200, [
  87. 'Access-Control-Allow-Origin' => '*',
  88. 'Access-Control-Allow-Method' => '*',
  89. 'Access-Control-Allow-Headers' => 'Content-Type',
  90. 'Content-Type' => 'text/plain;charset=UTF-8',
  91. //'Connection' => 'keep-alive',
  92. //'Keep-Alive' => 'timeout=5, max=100',
  93. ], $ret);
  94. $connection->send($response);
  95. };
  96. if(!defined('GLOBAL_START'))
  97. {
  98. Worker::runAll();
  99. }