Procházet zdrojové kódy

[php] Wolff add Adapterman variant (#10024)

Joan Miquel před 1 měsícem
rodič
revize
7455a4adf6

+ 1 - 0
frameworks/PHP/wolff/app/controllers/Home.php

@@ -101,6 +101,7 @@ class Home extends \Wolff\Core\Controller
 		usort($fortunes, function ($left, $right) {
             return $left['message'] <=> $right['message'];
         });
+		$res->setHeader('Content-Type', 'text/html; charset=utf-8');
 		View::render('fortunes', [
 			'fortunes' => $fortunes,
 		]);

+ 27 - 4
frameworks/PHP/wolff/benchmark_config.json

@@ -5,10 +5,10 @@
       "default": {
         "json_url": "/json",
         "plaintext_url": "/plaintext",
-		"db_url": "/db",
-		"query_url": "/queries?queries=",
-		"update_url": "/update?queries=",
-		"fortune_url": "/fortunes",
+        "db_url": "/db",
+        "query_url": "/queries?queries=",
+        "update_url": "/update?queries=",
+        "fortune_url": "/fortunes",
         "port": 8080,
         "approach": "Realistic",
         "classification": "Fullstack",
@@ -24,6 +24,29 @@
         "display_name": "Wolff",
         "notes": "",
         "versus": "php"
+      },
+      "workerman": {
+        "json_url": "/json",
+        "plaintext_url": "/plaintext",
+        "db_url": "/db",
+        "query_url": "/queries?queries=",
+        "update_url": "/update?queries=",
+        "fortune_url": "/fortunes",
+        "port": 8080,
+        "approach": "Realistic",
+        "classification": "Fullstack",
+        "database": "mysql",
+        "framework": "Wolff",
+        "language": "PHP",
+        "flavor": "PHP8",
+        "orm": "raw",
+        "platform": "workerman",
+        "webserver": "none",
+        "os": "Linux",
+        "database_os": "Linux",
+        "display_name": "Wolff [workerman]",
+        "notes": "",
+        "versus": "php"
       }
     }
   ]

+ 16 - 0
frameworks/PHP/wolff/deploy/conf/adapterman-php.ini

@@ -0,0 +1,16 @@
+opcache.enable=1
+opcache.enable_cli=1
+opcache.validate_timestamps=0
+opcache.save_comments=0
+opcache.enable_file_override=1
+opcache.memory_consumption=256
+opcache.interned_strings_buffer=16
+opcache.huge_code_pages=1
+
+mysqlnd.collect_statistics = Off
+memory_limit = 512M
+
+opcache.jit_buffer_size=128M
+opcache.jit=tracing
+
+disable_functions=header,header_remove,headers_sent,headers_list,http_response_code,setcookie,session_create_id,session_id,session_name,session_save_path,session_status,session_start,session_write_close,session_regenerate_id,session_unset,session_get_cookie_params,session_set_cookie_params,set_time_limit

+ 32 - 0
frameworks/PHP/wolff/public/start.php

@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * Config
+ */
+global $config;
+$config = require '../system/config.php';
+
+if ($config['stdlib_on']) {
+    include_once '../vendor/usbac/wolff-framework/src/stdlib.php';
+}
+
+error_reporting($config['development_on'] ? E_ALL : 0);
+ini_set('display_errors', strval($config['development_on']));
+
+/**
+ * Wolff
+ */
+
+require '../system/web.php';
+
+function run(): string
+{
+    global $config;
+    ob_start();
+
+    $_SERVER['DOCUMENT_ROOT'] = '/wolff/bench';
+    new Wolff\Kernel($config)->start();
+    header(HeaderDate::$date); // To pass the bench, nginx auto add it
+
+    return ob_get_clean();
+}

+ 47 - 0
frameworks/PHP/wolff/server.php

@@ -0,0 +1,47 @@
+<?php
+require_once __DIR__ . '/vendor/autoload.php';
+
+
+use Adapterman\Adapterman;
+use Workerman\Worker;
+use Workerman\Timer;
+
+Adapterman::init();
+
+$http_worker                = new Worker('http://0.0.0.0:8080');
+$http_worker->count         = (int) shell_exec('nproc') * 4;
+$http_worker->reusePort     = true;
+$http_worker->name          = 'AdapterMan Wolff';
+
+$http_worker->onWorkerStart = static function () {
+    HeaderDate::init();
+    chdir(__DIR__.'/public');
+    require 'start.php';
+};
+
+$http_worker->onMessage = static function ($connection) {
+
+    $connection->send(run());
+};
+
+Worker::runAll();
+
+class HeaderDate
+{
+    const NAME = 'Date: ';
+    
+    /**
+     * Date header
+     *
+     * @var string
+     */
+    public static $date;
+
+    public static function init(): void
+    {
+        self::$date = self::NAME . gmdate(DATE_RFC7231);
+        Timer::add(1, static function() {
+            self::$date = self::NAME . gmdate(DATE_RFC7231);
+        });
+    }
+}

+ 30 - 0
frameworks/PHP/wolff/wolff-workerman.dockerfile

@@ -0,0 +1,30 @@
+FROM ubuntu:24.04
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+RUN apt-get update -yqq && apt-get install -yqq software-properties-common > /dev/null
+RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php > /dev/null && \
+    apt-get update -yqq > /dev/null && apt-get upgrade -yqq > /dev/null
+
+RUN apt-get update -yqq > /dev/null && apt-get install -yqq git \
+    php8.4-cli php8.4-mysql php8.4-mbstring php8.4-xml php8.4-curl > /dev/null
+
+COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
+
+RUN apt-get install -y php-pear php8.4-dev libevent-dev > /dev/null
+RUN pecl install event-3.1.4 > /dev/null && echo "extension=event.so" > /etc/php/8.4/cli/conf.d/event.ini
+
+COPY deploy/conf/adapterman-php.ini /etc/php/8.4/cli/conf.d/20-adapterman.ini
+
+WORKDIR /wolff/bench
+COPY --link . .
+
+EXPOSE 8080
+
+RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --quiet 
+RUN composer require joanhey/adapterman:^0.7 --quiet
+
+RUN chmod -R 777 /wolff
+
+CMD php server.php start
+