modify plugin name
This commit is contained in:
+58
-99
@@ -3,7 +3,6 @@
|
|||||||
namespace Kiri\Server\Coroutine;
|
namespace Kiri\Server\Coroutine;
|
||||||
|
|
||||||
use Kiri\Abstracts\Component;
|
use Kiri\Abstracts\Component;
|
||||||
use Kiri\Events\EventDispatch;
|
|
||||||
use Kiri\Exception\ConfigException;
|
use Kiri\Exception\ConfigException;
|
||||||
use Kiri\Server\Constant;
|
use Kiri\Server\Constant;
|
||||||
use Kiri\Server\ProcessManager;
|
use Kiri\Server\ProcessManager;
|
||||||
@@ -79,14 +78,17 @@ class Http extends Component
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function start(array $config)
|
/**
|
||||||
|
* @param array $config
|
||||||
|
* @param $daemon
|
||||||
|
* @return void
|
||||||
|
* @throws ContainerExceptionInterface
|
||||||
|
* @throws Exception
|
||||||
|
* @throws NotFoundExceptionInterface
|
||||||
|
*/
|
||||||
|
public function initBaseServer(array $config, $daemon)
|
||||||
{
|
{
|
||||||
$this->configs = $this->sortService($config['ports']);
|
$this->configs = $config;
|
||||||
run(function () use ($config) {
|
|
||||||
$event = \Kiri::getDi()->get(EventDispatch::class);
|
|
||||||
|
|
||||||
$this->startTaskWorker($config);
|
|
||||||
|
|
||||||
foreach ($config as $value) {
|
foreach ($config as $value) {
|
||||||
$value = $this->resolveCallback($value);
|
$value = $this->resolveCallback($value);
|
||||||
if ($value['type'] == Constant::SERVER_TYPE_HTTP) {
|
if ($value['type'] == Constant::SERVER_TYPE_HTTP) {
|
||||||
@@ -94,8 +96,12 @@ class Http extends Component
|
|||||||
if (is_null($onRequest)) {
|
if (is_null($onRequest)) {
|
||||||
throw new \Exception('Server callback con\'t null.');
|
throw new \Exception('Server callback con\'t null.');
|
||||||
}
|
}
|
||||||
Coroutine::create(function () use ($value, $event, $onRequest) {
|
$server = new Coroutine\Http\Server($value['host'], $value['port'], null, true);
|
||||||
$this->bindHttpService($value, $onRequest);
|
|
||||||
|
$this->servers[$value['port']] = $server;
|
||||||
|
|
||||||
|
$server->handle('/', function (Request $request, Response $response) use ($onRequest) {
|
||||||
|
call_user_func($onRequest, $request, $response);
|
||||||
});
|
});
|
||||||
} else if ($value['type'] == Constant::SERVER_TYPE_WEBSOCKET) {
|
} else if ($value['type'] == Constant::SERVER_TYPE_WEBSOCKET) {
|
||||||
$handshake = $value['events'][Constant::HANDSHAKE] ?? null;
|
$handshake = $value['events'][Constant::HANDSHAKE] ?? null;
|
||||||
@@ -108,93 +114,6 @@ class Http extends Component
|
|||||||
throw new \Exception('Server callback con\'t null.');
|
throw new \Exception('Server callback con\'t null.');
|
||||||
}
|
}
|
||||||
|
|
||||||
Coroutine::create(function () use ($value, $handshake, $open, $close, $message) {
|
|
||||||
$this->WebSocketService($value, $handshake, $open, $close, $message);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
$message = $value['events'][Constant::RECEIVE] ?? null;
|
|
||||||
if (is_null($message)) {
|
|
||||||
throw new \Exception('Server callback con\'t null.');
|
|
||||||
}
|
|
||||||
$conn = $value['events'][Constant::CONNECT] ?? null;
|
|
||||||
$close = $value['events'][Constant::CLOSE] ?? null;
|
|
||||||
|
|
||||||
Coroutine::create(function () use ($value, $message, $conn, $close) {
|
|
||||||
$this->bindTcpService($value, $message, $conn, $close);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $value
|
|
||||||
* @param $onRequest
|
|
||||||
* @return void
|
|
||||||
* @throws \Exception
|
|
||||||
*/
|
|
||||||
protected function bindHttpService($value, $onRequest)
|
|
||||||
{
|
|
||||||
$server = new Coroutine\Http\Server($value['host'], $value['port'], null, true);
|
|
||||||
|
|
||||||
$this->servers[$value['port']] = $server;
|
|
||||||
|
|
||||||
$server->handle('/', function (Request $request, Response $response) use ($onRequest) {
|
|
||||||
call_user_func($onRequest, $request, $response);
|
|
||||||
});
|
|
||||||
$server->start();
|
|
||||||
|
|
||||||
$this->bindHttpService($value, $onRequest);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $value
|
|
||||||
* @param $message
|
|
||||||
* @param $conn
|
|
||||||
* @param $close
|
|
||||||
* @return void
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
protected function bindTcpService($value, $message, $conn, $close)
|
|
||||||
{
|
|
||||||
$server = new Coroutine\Server($value['host'], $value['port'], null, true);
|
|
||||||
|
|
||||||
$this->servers[$value['port']] = $server;
|
|
||||||
|
|
||||||
$server->handle(function (Coroutine\Server\Connection $connection) use ($message, $conn, $close) {
|
|
||||||
if (!is_null($conn)) {
|
|
||||||
call_user_func($conn, $connection);
|
|
||||||
}
|
|
||||||
while (true) {
|
|
||||||
$data = $connection->recv(1024);
|
|
||||||
if ($data === '' || $data === false) {
|
|
||||||
defer(function () use ($close, $connection) {
|
|
||||||
call_user_func($close, $connection);
|
|
||||||
});
|
|
||||||
$connection->close();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
call_user_func($message, $data);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$server->start();
|
|
||||||
|
|
||||||
$this->bindTcpService($value, $message, $conn, $close);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $value
|
|
||||||
* @param $handshake
|
|
||||||
* @param $open
|
|
||||||
* @param $close
|
|
||||||
* @param $message
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
private function WebSocketService($value, $handshake, $open, $close, $message)
|
|
||||||
{
|
|
||||||
$server = new Coroutine\Http\Server($value['host'], $value['port'], null, true);
|
$server = new Coroutine\Http\Server($value['host'], $value['port'], null, true);
|
||||||
|
|
||||||
$sender = $this->getContainer()->get(Sender::class);
|
$sender = $this->getContainer()->get(Sender::class);
|
||||||
@@ -216,9 +135,49 @@ class Http extends Component
|
|||||||
}
|
}
|
||||||
call_user_func($close, $response->fd);
|
call_user_func($close, $response->fd);
|
||||||
});
|
});
|
||||||
$server->start();
|
} else {
|
||||||
|
$message = $value['events'][Constant::RECEIVE] ?? null;
|
||||||
|
if (is_null($message)) {
|
||||||
|
throw new \Exception('Server callback con\'t null.');
|
||||||
|
}
|
||||||
|
$conn = $value['events'][Constant::CONNECT] ?? null;
|
||||||
|
$close = $value['events'][Constant::CLOSE] ?? null;
|
||||||
|
|
||||||
$this->WebSocketService($value, $handshake, $open, $close, $message);
|
$server = new Coroutine\Server($value['host'], $value['port'], null, true);
|
||||||
|
|
||||||
|
$this->servers[$value['port']] = $server;
|
||||||
|
|
||||||
|
$server->handle(function (Coroutine\Server\Connection $connection) use ($message, $conn, $close) {
|
||||||
|
if (!is_null($conn)) {
|
||||||
|
call_user_func($conn, $connection);
|
||||||
|
}
|
||||||
|
while (true) {
|
||||||
|
$data = $connection->recv(1024);
|
||||||
|
if ($data === '' || $data === false) {
|
||||||
|
defer(function () use ($close, $connection) {
|
||||||
|
call_user_func($close, $connection);
|
||||||
|
});
|
||||||
|
$connection->close();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
call_user_func($message, $data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function start()
|
||||||
|
{
|
||||||
|
run(function () {
|
||||||
|
$this->startTaskWorker($this->configs);
|
||||||
|
foreach ($this->servers as $value) {
|
||||||
|
Coroutine::create(function () use ($value) {
|
||||||
|
$value->start();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -42,7 +42,7 @@ class Server extends HttpService
|
|||||||
public State $state;
|
public State $state;
|
||||||
|
|
||||||
|
|
||||||
public ServerManager $manager;
|
public Kiri\Server\Coroutine\Http $manager;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -50,7 +50,7 @@ class Server extends HttpService
|
|||||||
*/
|
*/
|
||||||
public function init()
|
public function init()
|
||||||
{
|
{
|
||||||
$this->manager = Kiri::getContainer()->get(ServerManager::class);
|
$this->manager = Kiri::getContainer()->get(Kiri\Server\Coroutine\Http::class);
|
||||||
$enable_coroutine = Config::get('servers.settings.enable_coroutine', false);
|
$enable_coroutine = Config::get('servers.settings.enable_coroutine', false);
|
||||||
Config::set('servers.settings.enable_coroutine', true);
|
Config::set('servers.settings.enable_coroutine', true);
|
||||||
if ($enable_coroutine != true) {
|
if ($enable_coroutine != true) {
|
||||||
|
|||||||
Reference in New Issue
Block a user