Workerman
Language: PHP · View source on GitHub
Dockerfile
FROM php:8.5-cli
COPY --from=composer/composer:latest-bin --link /composer /usr/local/bin/composer
RUN docker-php-ext-install pcntl > /dev/null
RUN apt-get update -yqq && apt-get install -yqq git unzip > /dev/null && rm -rf /var/lib/apt/lists/*
WORKDIR /workerman
COPY src/Servers/WorkermanServer/composer.json .
RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --quiet
COPY src/Servers/WorkermanServer/php.ini /etc/php/8.5/cli/php.ini
COPY src/Servers/WorkermanServer/start.php .
EXPOSE 8080
CMD ["php", "/workerman/start.php", "start"]Source
<?php
use Workerman\Worker;
use Workerman\Protocols\Http\Response;
require_once __DIR__ . '/vendor/autoload.php';
// #### http worker ####
$http_worker = new Worker('http://0.0.0.0:8080');
$http_worker->reusePort = true;
$http_worker->count = (int) shell_exec('nproc');
$http_worker->name = 'bench';
// Data received
$http_worker->onMessage = static function ($connection, $request) {
return match($request->path()) {
'/echo' => $connection->send( new Response(
200,
['Content-Type' => 'text/plain'],
implode("\n", array_map(fn($name, $value) => "$name: $value", $request->header(), $request->header())))
),
'/cookie' => $connection->send( new Response(
200,
['Content-Type' => 'text/plain'],
implode("\n", array_map(fn($name, $value) => "$name=$value", $request->cookie(), $request->cookie())))
),
'/' => $connection->send( new Response(
200,
['Content-Type' => 'text/plain'],
$request->method() === 'POST' ? $request->rawBody() : 'OK')
),
default => null,
};
};
// Run all workers
Worker::runAll();Test Results
Loading results...