Example #1
0
 private function _getWorkerID()
 {
     if ($this->_workerID === -1) {
         if (Container::IsRegistered(\swoole_server::class)) {
             $this->_workerID = Container::GetInstance(\swoole_server::class)->worker_id;
         }
     }
     return $this->_workerID;
 }
Example #2
0
 protected function tryInitInfo($force = false)
 {
     if (!isset($this->remoteIP) || $force) {
         //因为跨进程投递时server会改变,为了确保成功,不使用构造函数注入的方式获取当前server
         /** @var \swoole_server $swoole */
         $swoole = Container::GetInstance(\swoole_server::class);
         $connectionInfo = $swoole->connection_info($this->GetFD(), $this->GetFromID());
         $this->remoteIP = $connectionInfo['remote_ip'];
         $this->remotePort = $connectionInfo['remote_port'];
         $this->serverPort = $connectionInfo['server_port'];
         $this->connectTime = $connectionInfo['connect_time'];
         $this->lastTime = $connectionInfo['last_time'];
     }
 }
Example #3
0
 /**
  * @param \DIServer\Interfaces\IHandler $handler
  *
  * @return \Closure
  */
 private function _createPipeClosure(\DIServer\Interfaces\IHandler $handler)
 {
     $pipeline = new Pipeline();
     $middlewareClasses = $handler->GetMiddlewares();
     $middlewareHandlers = [];
     foreach ($middlewareClasses as $middlewareClass) {
         $refClass = new \ReflectionClass($middlewareClass);
         if (!$refClass->isSubclassOf(IMiddleware::class)) {
             Log::Warning("Try to load {$middlewareClass} in " . get_class($handler) . " but is not instance of IMiddleware");
             continue;
         }
         $middlewareHandlers[] = Container::BuildWithClass($middlewareClass);
     }
     return $pipeline->Through($middlewareHandlers)->Prepared(function ($request) use($handler) {
         //最后一层封装为Handler的默认Handle方法
         return Container::CallMethod($handler, 'Handle', ['request' => $request]);
     });
 }
Example #4
0
 public function __construct()
 {
     $pipeline = new Pipeline();
     $middlewareClasses = $this->GetMiddlewares();
     $middlewareHandlers = [];
     foreach ($middlewareClasses as $middlewareClass) {
         $refClass = new \ReflectionClass($middlewareClass);
         if (!$refClass->isSubclassOf(IMiddleware::class)) {
             Log::Debug("Try to load {$middlewareClass} in " . get_class($this) . " but is not instance of IMiddleware");
             continue;
         }
         $middlewareHandlers[] = Container::BuildWithClass($middlewareClass);
     }
     $this->dispatchRequestClosure = $pipeline->Through($middlewareHandlers)->Prepared(function ($request) {
         //最后一层封装为Handler的默认Handle方法
         return Container::CallMethod($this, 'Handle', ['request' => $request]);
     });
 }
Example #5
0
 public function OnManagerStart(\swoole_server $server)
 {
     //各个进程的$server对象不是同一个,要重置。
     Container::Unregister(\swoole_server::class);
     Container::RegisterClassByInstance(\swoole_server::class, $server);
     $this->managerServer = Container::GetInstance(IManagerServer::class);
     Event::Listen('OnManagerStart', [&$server]);
     $this->managerServer->OnManagerStart($server);
 }
Example #6
0
 /**
  * @return \swoole_server
  */
 protected function getCurrentSwoole()
 {
     return Container::GetInstance(\swoole_server::class);
 }