<?php namespace { use php\concurrent\ExecutorService; use php\io\IOException; use php\lang\Environment; use php\net\ServerSocket; $server = new ServerSocket(); $server->bind('localhost', 8080); $service = ExecutorService::newFixedThreadPool(5); // create a thread pool echo "Start HTTP Server on http://localhost:8080/ ...\n"; while (true) { $socket = $server->accept(); echo "Connect client ... \n"; $service->execute(function () use($socket) { // processing a http request in a thread ob_implicit_flush(true); $out = $socket->getOutput(); try { $out->write("HTTP/1.1 200 OK\r\n"); $out->write("Content-Type: text/html\r\n"); $out->write("Connection: close\r\n\r\n"); $out->write("Hello world!"); $out->flush(); } catch (IOException $e) { echo "Error: " . $e->getMessage(), "\n"; } finally { // JPHP supports `finally` as in PHP 5.5 $socket->shutdownOutput(); }
--TEST-- Test response --FILE-- <?php use php\net\ServerSocket; use php\net\URL; use php\webserver\WebRequest; use php\webserver\WebResponse; use php\webserver\WebServer; $server = new WebServer(function (WebRequest $request, WebResponse $response) { $response->writeToBody('foobar'); $response->status = 404; }); $server->port = ServerSocket::findAvailableLocalPort(); $server->run(); $conn = null; $conn = (new URL("http://localhost:{$server->port}/"))->openConnection(); $conn->requestMethod = 'GET'; $conn->setRequestProperty('Content-Type', 'text/html'); $conn->setRequestProperty('Accept', 'text/plain'); $conn->connect(); var_dump($conn->responseCode); var_dump($conn->getErrorStream()->readFully()); ?> --EXPECT-- int(404) string(6) "foobar"
$webserverapi = new WebServerAPI($config->get("api.webserver.token"), $config->get("api.webserver.token.allowed"), $config->get("api.webserver.whitelist"), $config->get("api.webserver.whitelist.ip")); $rsa->SetPrivate($config->get("crypto.rsaN"), $config->get("crypto.rsaE"), $config->get("crypto.rsaD")); $pooling = new DatabasePooling($config->get("db.hostname"), $config->get("db.port"), $config->get("db.username"), $config->get("db.password"), $config->get("db.name"), $config->get("db.pool.minsize"), $config->get("db.pool.maxsize")); $database = new Database(); $database->pool =& $pooling; $cache = new CacheLoader($database); $roommanager = new RoomManager($database, $cache); $roommanager->getRoom(16); $roommanager->getRoom(17); $roommanager->getRoom(18); $events = array(); $autoloader->loadEvents(); Console::WriteLine("Loaded " . count($events) . " events !"); $furnidataparser->setCache(); Console::WriteLine("Loaded " . count($furnidataparser->floorItems) . " floor items and " . count($furnidataparser->wallItems) . " wall items !"); $server = new ServerSocket(); $server->bind($config->get("game.tcp.bindip"), $config->get("game.tcp.port")); $service = ThreadPool::createFixed($config->get("game.tcp.conlimit")); $index = new IndexManager(); if ($config->get("api.webserver.enabled")) { $webserverapi->start($config->get("api.webserver.port")); } Console::WriteLine("Server -> READY! (" . $config->get("game.tcp.bindip") . ":" . $config->get("game.tcp.port") . ")"); $environment = new Environment(); foreach ($autoloader->getClassArray() as $class) { $environment->importClass($class); } foreach ($autoloader->getEventsArray() as $event) { $environment->importClass($event); } while (true) {