Skip to content

Commit 94d0dad

Browse files
committed
add workerman driver
1 parent f3d8c07 commit 94d0dad

File tree

3 files changed

+51
-2
lines changed

3 files changed

+51
-2
lines changed

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/.phpunit.cache
2+
/vendor
3+
composer.lock
4+
/.idea
5+
/.fleet
6+
/.vscode
7+
.phpunit.result.cache

composer.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "microphp/workerman",
33
"autoload": {
44
"psr-4": {
5-
"Microphp\\Workerman\\": "src/"
5+
"MicroPHP\\Workerman\\": "src/"
66
}
77
},
88
"authors": [
@@ -12,6 +12,7 @@
1212
}
1313
],
1414
"require": {
15-
"workerman/workerman": ">=4"
15+
"workerman/workerman": ">=4",
16+
"workerman/psr7": "*"
1617
}
1718
}

src/WorkermanHttpServer.php

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace MicroPHP\Workerman;
6+
7+
use League\Route\Router;
8+
use League\Route\Strategy\ApplicationStrategy;
9+
use MicroPHP\Framework\Application;
10+
use MicroPHP\Framework\Http\Contract\ServerInterface;
11+
use MicroPHP\Framework\Http\ServerConfig;
12+
use Workerman\Connection\TcpConnection;
13+
use Workerman\Protocols\Http\Request;
14+
use Workerman\Psr7\Response;
15+
use Workerman\Psr7\ServerRequest;
16+
use Workerman\Worker;
17+
18+
class WorkermanHttpServer implements ServerInterface
19+
{
20+
public function run(Router $router): void
21+
{
22+
$strategy = new ApplicationStrategy();
23+
$strategy->setContainer(Application::getContainer());
24+
$router->setStrategy($strategy);
25+
$serverConfig = new ServerConfig();
26+
27+
$httpWorker = new Worker($serverConfig->getUri(true));
28+
29+
$httpWorker->count = $serverConfig->getWorkers();
30+
31+
$httpWorker->onMessage = function (TcpConnection $connection, Request $request) use ($router) {
32+
$psr7Request = new ServerRequest($request->rawBuffer());
33+
$serverRequest = \MicroPHP\Framework\Http\ServerRequest::fromPsr7($psr7Request);
34+
35+
$response = $router->dispatch($serverRequest);
36+
$connection->send(new Response($response->getStatusCode(), $response->getHeaders(), $response->getBody(), $response->getProtocolVersion(), $response->getReasonPhrase()));
37+
};
38+
39+
Worker::runAll();
40+
}
41+
}

0 commit comments

Comments
 (0)