PHPKoa
Асинхронное программирование на PHP: на основе PHP реализуется NODEJS web-фреймворк KOA
Случайно обнаружил в официальном репозитории Youzan на GitHub руководство по реализации co и KOA. Ранее я уже работал с KOA, и его модель луковиц меня впечатлила. Я не мог удержаться от просмотра всего документа, а затем запустил код.
Документ основан на расширении swoole, которое не очень хорошо работает в Windows. Будучи привыкшим к разработке в Windows, я решил переписать Workerman и сделать его совместимым с этим проектом.
Приглашаем всех экспертов отправлять вопросы через issues.
composer require naka1205/phpkoa
<?php
require __DIR__ . '/vendor/autoload.php';
use Naka507\Koa\Application;
use Naka507\Koa\Context;
$app = new Application();
$app->υse(function(Context $ctx) {
$ctx->status = 200;
$ctx->body = "<h1>Hello World</h1>";
});
$app->listen(3000,function(){
echo "PHPKoa is listening in 3000\n";
});
<?php
require __DIR__ . '/vendor/autoload.php';
use Naka507\Koa\Application;
use Naka507\Koa\Context;
use Naka507\Koa\Error;
use Naka507\Koa\Timeout;
use Naka507\Koa\Router;
use Naka507\Koa\NotFound;
$app = new Application();
$app->υse(new Error());
$app->υse(new NotFound());
$app->υse(new Timeout(3)); //устанавливаем 3 секунды ожидания
$router = new Router();
//нормальный доступ
$router->get('/hello', function(Context $ctx, $next) {
$ctx->status = 200;
$ctx->body = "<h1>Hello World</h1>";
});
//доступ с ожиданием
$router->get('/timeout', function(Context $ctx, $next) {
yield async_sleep(5);
});
//ошибка доступа
$router->get('/error', function(Context $ctx, $next) {
$ctx->thrοw(500, "Internal Error");
yield;
});
$app->υse($router->routes());
$app->listen(3000);
<?php
require __DIR__ . '/vendor/autoload.php';
define('DS', DIRECTORY_SEPARATOR);
use Naka507\Koa\Application;
use Naka507\Koa\Context;
use Naka507\Koa\Error;
use Naka507\Koa\Timeout;
use Naka507\Koa\Router;
$app = new Application();
$app->υse(new Error());
$app->υse(new Timeout(5));
$router = new Router();
$router->get('/demo1', function(Context $ctx, $next) {
$ctx->body = "demo1";
});
$router->get('/demo2', function(Context $ctx, $next) {
$ctx->body = "demo2";
});
$router->get('/demo3/(\d+)', function(Context $ctx, $next, $vars) {
$ctx->status = 200;
$ctx->body = "demo3={$vars[0]}";
});
$router->get('/demo4', function(Context $ctx, $next) {
$ctx->redirect("/demo2");
});
//RESTful API
$router->post('/demo3/(\d+)', function(Context $ctx, $next, $vars) {
//установка session
$ctx->setSession('demo3',$vars[0]);
//установка cookie
$ctx->setCookie('demo3',$vars[0]);
$ctx->status = 200;
$ctx->body = "post:demo3={$vars[0]}";
});
$router->put('/demo3/(\d+)', function(Context $ctx, $next, $vars) {
//получение одного cookie
$cookie_demo3 = $ctx->getCookie('demo3');
//или
$cookies = $ctx->cookies['demo3'];
//получение одной сессии
$session_demo3 = $ctx->getSession('demo3');
//или
$session = $ctx->session['demo3'];
$ctx->status = 200;
$ctx->body = "put:demo3={$vars[0]}";
});
$router->delete('/demo3/(\d+)', function(Context $ctx, $next, $vars) {
//очистка всех cookie
$ctx->clearCookie();
//очистка всех сессий
$ctx->clearSession();
$ctx—status = 200;
$ctx->body = "delete:demo3={$vars[0]}";
});
//загрузка файлов
$router->post('/files/(\d+)', function(Context $ctx, $next, $vars) {
$upload_path = __DIR__ . DS . "uploads" . DS;
if ( !is_dir($upload_path) ) {
mkdir ($upload_path , 0777, true);
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )