浏览代码

Adding Hamlet 3 (#4000)

Adding Hamlet 3 / Swoole Integration
Vasily Kartashov 7 年之前
父节点
当前提交
5a9718f211

+ 0 - 3
frameworks/PHP/hamlet/Benchmark/Application.php

@@ -5,9 +5,6 @@ namespace Benchmark;
 use Benchmark\Entities\PlainTextEntity;
 use Benchmark\Resources\DbResource;
 use Benchmark\Resources\FortuneResource;
-use Benchmark\Resources\JsonResource;
-use Benchmark\Resources\PlainTextResource;
-use Benchmark\Resources\QueryResource;
 use Benchmark\Resources\UpdateResource;
 use Cache\Adapter\Void\VoidCachePool;
 use Hamlet\Applications\AbstractApplication;

+ 3 - 2
frameworks/PHP/hamlet/Benchmark/Resources/DbResource.php

@@ -20,7 +20,8 @@ class DbResource implements WebResource
 
     public function getResponse(Request $request): Response
     {
-        $count = $request->parameter('queries');
+        $queryParams = $request->getQueryParams();
+        $count = $queryParams['queries'] ?? null;
         if ($count !== null && $count > 0) {
             $count = min($count, 500);
         } else {
@@ -42,7 +43,7 @@ class DbResource implements WebResource
             $payload[] = $procedure->fetchOne();
         }
 
-        if (!$request->hasParameter('queries')) {
+        if (!isset($queryParams['queries'])) {
             $payload = $payload[0];
         }
 

+ 1 - 1
frameworks/PHP/hamlet/Benchmark/Resources/UpdateResource.php

@@ -20,7 +20,7 @@ class UpdateResource implements WebResource
 
     public function getResponse(Request $request): Response
     {
-        $count = $request->parameter('queries');
+        $count = $request->getQueryParams()['queries'] ?? null;
         if ($count !== null && $count > 0) {
             $count = min($count, 500);
         } else {

+ 23 - 0
frameworks/PHP/hamlet/benchmark_config.json

@@ -23,6 +23,29 @@
       "display_name": "hamlet",
       "notes": "",
       "versus": "php"
+    },
+    "swoole": {
+      "plaintext_url": "/plaintext",
+      "json_url": "/json",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "fortune_url": "/fortunes",
+      "update_url": "/update?queries=",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Fullstack",
+      "database": "mysql",
+      "framework": "hamlet",
+      "language": "PHP",
+      "flavor": "PHP7",
+      "orm": "micro",
+      "platform": "None",
+      "webserver": "swoole",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "hamlet-swoole",
+      "notes": "",
+      "versus": "php"
     }
   }]
 }

+ 1 - 1
frameworks/PHP/hamlet/composer.json

@@ -1,6 +1,6 @@
 {
   "require": {
-    "hamlet/hamlet-core" : "^2",
+    "hamlet/hamlet-core" : "^3",
     "cache/void-adapter": "^1"
   },
   "autoload": {

+ 21 - 0
frameworks/PHP/hamlet/hamlet-swoole.dockerfile

@@ -0,0 +1,21 @@
+FROM php:7.2
+
+ENV SWOOLE_VERSION=4.0.4
+
+RUN cd /tmp && curl -sSL "https://github.com/swoole/swoole-src/archive/v${SWOOLE_VERSION}.tar.gz" | tar xzf - \
+        && cd swoole-src-${SWOOLE_VERSION} \
+        && phpize && ./configure > /dev/null && make > /dev/null && make install > /dev/null \
+        && docker-php-ext-enable swoole
+
+RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
+
+RUN apt-get update && apt-get install -y git unzip
+RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
+
+ADD ./ /hamlet
+WORKDIR /hamlet
+
+RUN chmod -R 777 /hamlet
+RUN composer update
+
+CMD php /hamlet/swoole.php

+ 3 - 8
frameworks/PHP/hamlet/index.php

@@ -2,11 +2,6 @@
 
 require_once __DIR__ . '/vendor/autoload.php';
 
-use Hamlet\Requests\Request;
-use Benchmark\Application;
-
-$application = new Application();
-$request = Request::fromGlobals();
-$response = $application->run($request);
-$application->output($request, $response);
-
+\Hamlet\Bootstraps\ServerBootstrap::run(function () {
+    return new \Benchmark\Application;
+});

+ 7 - 0
frameworks/PHP/hamlet/swoole.php

@@ -0,0 +1,7 @@
+<?php
+
+require_once __DIR__ . '/vendor/autoload.php';
+
+\Hamlet\Bootstraps\SwooleBootstrap::run('0.0.0.0', 8080, function () {
+    return new \Benchmark\Application;
+});