From f41008b87cb55c74d3aa5c592405d6662b83e86b Mon Sep 17 00:00:00 2001 From: Marwan Date: Sun, 31 Dec 2017 16:49:06 +0300 Subject: [PATCH 1/2] ssl --- .gitignore | 1 + nbproject/project.properties | 7 +++++++ nbproject/project.xml | 9 +++++++++ src/Server/Manager.php | 2 +- 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 nbproject/project.properties create mode 100644 nbproject/project.xml diff --git a/.gitignore b/.gitignore index 2cd3058b..adac18f8 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ composer.lock # Folders vendor .idea +/nbproject/private/ \ No newline at end of file diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 00000000..176a13fe --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,7 @@ +include.path=${php.global.include.path} +php.version=PHP_71 +source.encoding=UTF-8 +src.dir=. +tags.asp=false +tags.short=false +web.root=. diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 00000000..4a7c0a93 --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,9 @@ + + + org.netbeans.modules.php.project + + + Swoole + + + diff --git a/src/Server/Manager.php b/src/Server/Manager.php index 381b1621..9ad3e7a6 100644 --- a/src/Server/Manager.php +++ b/src/Server/Manager.php @@ -106,7 +106,7 @@ protected function createSwooleHttpServer() $host = $this->container['config']->get('swoole_http.server.host'); $port = $this->container['config']->get('swoole_http.server.port'); - $this->server = new Server($host, $port); + $this->server = new Server($host, $port, SWOOLE_SOCK_TCP | SWOOLE_SSL); } /** From c32ed1c11e1f6b3c12a306fb578386b5ac62a419 Mon Sep 17 00:00:00 2001 From: Marwan Date: Tue, 2 Jan 2018 17:44:17 +0300 Subject: [PATCH 2/2] with blackfire --- src/Server/Manager.php | 63 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/src/Server/Manager.php b/src/Server/Manager.php index 9ad3e7a6..f1c79e5e 100644 --- a/src/Server/Manager.php +++ b/src/Server/Manager.php @@ -7,6 +7,7 @@ class Manager { + const MAC_OSX = 'Darwin'; /** @@ -106,7 +107,7 @@ protected function createSwooleHttpServer() $host = $this->container['config']->get('swoole_http.server.host'); $port = $this->container['config']->get('swoole_http.server.port'); - $this->server = new Server($host, $port, SWOOLE_SOCK_TCP | SWOOLE_SSL); + $this->server = new Server($host, $port); } /** @@ -173,17 +174,22 @@ public function onWorkerStart() */ public function onRequest($swooleRequest, $swooleResponse) { + $blackfire = new ReactHttpServerHelper(); $this->container['events']->fire('http.onRequest'); // Reset user-customized providers $this->getApplication()->resetProviders(); - + $blackfire->start($swooleRequest); + $headers = array_merge(['Content-Type' => 'text/plain'], $blackfire->stop()); + foreach ($headers as $key => $header) { + $swooleResponse->header($key, $header); + } $illuminateRequest = Request::make($swooleRequest)->toIlluminate(); $illuminateResponse = $this->getApplication()->run($illuminateRequest); $response = Response::make($illuminateResponse, $swooleResponse); // To prevent 'connection[...] is closed' error. - if (! $this->server->exist($swooleRequest->fd)) { + if (!$this->server->exist($swooleRequest->fd)) { return; } $response->send(); @@ -221,7 +227,7 @@ protected function createApplication() */ protected function getApplication() { - if (! $this->application instanceof Application) { + if (!$this->application instanceof Application) { $this->createApplication(); } @@ -306,4 +312,53 @@ protected function setProcessName($process) swoole_set_process_name($name); } + +} + +class ReactHttpServerHelper +{ + + private $probe; + + public function start($request) + { + $headers = array_change_key_case($request->header, CASE_LOWER); + + // Only enable when the X-Blackfire-Query header is present + if (!isset($headers['x-blackfire-query'])) { + return false; + } + + if ($this->probe !== null) { + return false; + } + + $this->probe = new \BlackfireProbe($headers['x-blackfire-query']); + + // Stop if it failed + if (!$this->probe->enable()) { + return false; + } + + return true; + } + + public function stop() + { + if ($this->probe === null) { + return array(); + } + + if (!$this->probe->isEnabled()) { + return array(); + } + + $this->probe->close(); + + $header = explode(':', $this->probe->getResponseLine(), 2); + $this->probe = null; + + return array('x-' . $header[0] => $header[1]); + } + }