Skip to content

Commit 9a0b09e

Browse files
committed
*small fixes
1 parent dd38f3d commit 9a0b09e

File tree

7 files changed

+104
-61
lines changed

7 files changed

+104
-61
lines changed

‎server.php‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,16 @@
22

33
use mfe\server\libs\http\server\middleware\ApplicationServer;
44
use mfe\server\libs\http\server\middleware\StaticServer;
5-
use mfe\server\libs\http\server\Server;
65
use mfe\server\libs\http\server\upgrades\WebSocketServer;
76

7+
use mfe\server\libs\http\server\StreamServer as Server;
8+
89
require_once 'vendor/autoload.php';
910

11+
error_reporting(E_ALL);
12+
set_time_limit(0);
13+
ob_implicit_flush();
14+
1015
$server = new Server(HttpServer::build([
1116
WebSocketServer::class
1217
], [

‎src/api/http/ITcpServer.php‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?php namespace mfe\server\api\http;
22
use ArrayObject;
3+
use Thread;
34

45
/**
56
* Interface ITcpServer
@@ -15,10 +16,9 @@ interface ITcpServer
1516
static public function build(array $upgrades, array $middleware);
1617

1718
/**
18-
* @param string $ip
19-
* @param integer $port
19+
* @return void
2020
*/
21-
public function run($ip, $port);
21+
public function run();
2222

2323
/**
2424
* @param ArrayObject $config

‎src/libs/http/HttpSocketWriter.php‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public function __construct($socket, IHttpSocketReader $reader)
4343
*/
4444
public function send($data, $trim = true)
4545
{
46-
if($trim){
46+
if ($trim) {
4747
$data = trim($data);
4848
}
4949

‎src/libs/http/server/HttpServer.php‎

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@
99
use mfe\server\libs\http\HttpSocketReader;
1010
use mfe\server\libs\http\HttpSocketWriter;
1111

12+
require_once dirname(dirname(dirname(dirname(__DIR__)))) . '/vendor/autoload.php';
13+
1214
/**
1315
* Class HttpServer
1416
*
1517
* @package mfe\server\libs\http\server
1618
*/
1719
class HttpServer implements ITcpServer
1820
{
19-
use TStreamServer;
21+
public $enableKeepAlive = false;
2022

2123
/** @var ArrayObject */
2224
private $config;
@@ -30,10 +32,21 @@ class HttpServer implements ITcpServer
3032
/** @var IUpgradeServer[] */
3133
private $upgradedSockets = [];
3234

33-
public function __construct($upgrades, $middleware)
35+
/** @var resource */
36+
private $socket;
37+
38+
/**
39+
* @param $socket
40+
* @param array $proxy
41+
* @param ArrayObject $config
42+
*/
43+
public function __construct($socket, array $proxy, ArrayObject $config)
3444
{
35-
$this->upgrades = $upgrades;
36-
$this->middleware = $middleware;
45+
$this->socket = $socket;
46+
$this->setConfig($config);
47+
$this->upgrades = $proxy['upgrades'];
48+
$this->middleware = $proxy['middleware'];
49+
$this->run();
3750
}
3851

3952
/**
@@ -44,7 +57,11 @@ public function __construct($upgrades, $middleware)
4457
*/
4558
static public function build(array $upgrades = [], array $middleware = [])
4659
{
47-
return new static($upgrades, $middleware);
60+
return [
61+
'_CLASS' => __CLASS__,
62+
'upgrades' => $upgrades,
63+
'middleware' => $middleware
64+
];
4865
}
4966

5067
/**
@@ -57,14 +74,9 @@ public function setConfig(ArrayObject $config)
5774
$this->config = $config;
5875
}
5976

60-
public function run($ip, $port)
77+
public function run()
6178
{
62-
$this->listenStreamServer($ip, $port);
63-
//stream_set_chunk_size($this->server, 1024);
64-
//stream_set_blocking($this->server, 1);
65-
stream_set_timeout($this->server, 5);
66-
$this->acceptSockets();
67-
$this->closeStreamServer();
79+
$this->handleSocket($this->socket);
6880
}
6981

7082
/**
@@ -90,7 +102,7 @@ protected function handleSocket($socket)
90102
$this->keepAliveHandler($socket);
91103
}
92104

93-
$this->closeSocket($socket);
105+
fclose($socket);
94106

95107
return true;
96108
}
@@ -108,7 +120,9 @@ protected function pipe($socket, IHttpSocketReader $reader, IHttpSocketWriter $w
108120
$this->upgradedSockets[(int)$socket] = $upgrade;
109121
} else {
110122
if ($reader->isHttpRequest) {
111-
$reader->tryKeepAlive();
123+
if ($this->enableKeepAlive) {
124+
$reader->tryKeepAlive();
125+
}
112126
$reader->parseBody();
113127
$reader->overrideGlobals();
114128
$this->httpRequest($reader, $writer);
@@ -140,7 +154,7 @@ protected function keepAliveHandler($socket)
140154
*
141155
* @return void
142156
*/
143-
private function httpRequest(IHttpSocketReader $reader, IHttpSocketWriter $writer)
157+
protected function httpRequest(IHttpSocketReader $reader, IHttpSocketWriter $writer)
144158
{
145159
foreach ($this->middleware as $middleware) {
146160
$middleware = new $middleware($this->config);
@@ -151,6 +165,6 @@ private function httpRequest(IHttpSocketReader $reader, IHttpSocketWriter $write
151165
}
152166
}
153167

154-
$writer->setHttpStatus(404)->send('Error 404: Not found file by path '. $reader->getUriPath());
168+
$writer->setHttpStatus(404)->send('Error 404: Not found file by path ' . $reader->getUriPath());
155169
}
156170
}

‎src/libs/http/server/Server.php‎

Lines changed: 0 additions & 39 deletions
This file was deleted.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php namespace mfe\server\libs\http\server;
2+
3+
use ArrayObject;
4+
use mfe\server\libs\http\server\exceptions\StreamServerException;
5+
6+
/**
7+
* Class StreamServer
8+
*
9+
* @package mfe\server\libs\http\server
10+
*/
11+
class StreamServer
12+
{
13+
use TStreamServer;
14+
15+
/** @var ArrayObject */
16+
private $config;
17+
18+
/** @var array */
19+
private $builder;
20+
21+
/**
22+
* @param string $builder
23+
* @param array $config
24+
*/
25+
public function __construct($builder, array $config)
26+
{
27+
$this->config = new ArrayObject($config, ArrayObject::ARRAY_AS_PROPS);
28+
$this->builder = $builder;
29+
}
30+
31+
/**
32+
* @param $socketBind
33+
*
34+
* @throws StreamServerException
35+
*/
36+
public function listen($socketBind)
37+
{
38+
$bindAddress = explode(':', $socketBind);
39+
fwrite(STDOUT, "Server started at: http://{$socketBind}/" . PHP_EOL);
40+
41+
$this->listenStreamServer($bindAddress[0], $bindAddress[1]);
42+
stream_set_timeout($this->server, 5);
43+
$this->acceptSockets();
44+
$this->closeStreamServer();
45+
}
46+
47+
/**
48+
* @param resource $socket
49+
*/
50+
protected function handleSocket($socket)
51+
{
52+
new $this->builder['_CLASS']($socket, [
53+
'upgrades' => $this->builder['upgrades'],
54+
'middleware' => $this->builder['middleware']
55+
], $this->config);
56+
}
57+
}

‎src/libs/http/server/TStreamServer.php‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ protected function closeStreamServer()
5050
protected function acceptSockets()
5151
{
5252
while (true) {
53+
foreach ($this->sockets as $socket) {
54+
if (get_resource_type($socket) !== 'stream') {
55+
unset($this->sockets[(int)$socket]);
56+
}
57+
}
58+
5359
$sockets = $this->sockets;
5460
$sockets[(int)$this->server] = $this->server;
5561
$write = $except = null;
@@ -89,7 +95,7 @@ protected function handleSocket($socket)
8995
/**
9096
* @param resource $socket
9197
*/
92-
protected function closeSocket($socket)
98+
public function closeSocket($socket)
9399
{
94100
unset($this->sockets[(int)$socket]);
95101
fclose($socket);

0 commit comments

Comments
 (0)