Автор оригинала: David Wong.
? Свет- php Это высокопроизводительный PHP-фреймворк, основанный на swole , легкая инкапсуляция и простота использования, что делает его выдающимся в небольших и средних высокопроизводительных проектах.
- Экологические требования
- Руководство по установке
- файл конфигурации
- Маршрут
- промежуточный слой
- Контроллер
- крюк
- Задача задача
- Веб-карман
- база данных
- Испытание давлением
Экологические требования
| .2 Рекомендация 7.2 | PHP |
| .2.9 PHP5 больше не поддерживается с 2.0.12 Рекомендуется 4.2.9+ | Свул |
| Большинство систем Linux работают с CentOS | Линукс |
Руководство по установке
1-1. При установке Composer (пакетов) версия, установленная таким образом, может быть не последней. Если эта проблема возникает, пожалуйста, установите в режиме 1-2.
composer create-project woann/light-php -vvv
1-2. Установите через Git.
git clone https://github.com/woann/Light-php.git
2. переименование .env.пример Файл для .env И конфигурировать
3. Выполнение в корневом каталоге проекта php bin\легкий запуск Служба запуска
4. Доступ к браузеру http://127.0.0.1:9521 Могу видеть привет, мир Вывод. До сих пор фреймворк был установлен.
файл конфигурации
1. Файл конфигурации для Light-php /настроен В каталоге платформа интегрирует глобальные профили окружающей среды /.env Обычные конфигурации настраиваются внутри. файлы env.
2. /config/app.php Основные конфигурационные файлы фреймворка в основном используются для настройки swoole Расширьте соответствующие параметры.
3. /конфигурация/ /конфигурация/
4. /конфигурация/hook.php Для настройки крючков (крючки в основном используются для отделения бизнес-логики от служб уведомлений).
5. /конфигурация/redis.php , Файл конфигурации redis . Конфигурация redis Подключение связанных параметров.
6. /конфигурация/ /конфигурация/
7. Значение конкретных параметров приведенного выше конфигурационного файла указано в коде, поэтому я не буду подробно останавливаться на этом здесь.
Маршрут
Вот пример маршрутизации /config/route.php Включает маршрутизацию HTTP и маршрутизацию websocket (примечание: в маршрутизации параметры контроллера сокращены для контроллера, а фактические файлы контроллера должны быть добавлены позже Контроллер )
return [
'm'=>'index', //default module
'c'=>'index', //default controller
'a'=>'init', // default operation
'ext'=>'. html', //pseudo-static suffixes such as. HTML
'http'=> [//http routing
//uri - - Request Method - - Module / Controller / Method - [Middleware]
'/' => ['GET','Index/Index/index','Test'],
'test/' => ['GET','Index/Index/ws']
],
'websocket'=> [//websocket routing
//uri - Module/Controller/Method
'ws' => 'Index/WebSocket/index',
]
];промежуточный слой
Файлы промежуточного программного обеспечения должны быть встроены в /приложение/Промежуточный слой В каталоге имя класса должно соответствовать имени файла и реализовано Библиотека\Промежуточное программное обеспечение Интерфейс, имя метода обработки промежуточного программного обеспечения должно быть дескриптор После фильтрации, если возвращается конечный результат, он должен быть true 。 Пример:
Контроллер
1. Чтобы создать контроллер, файл контроллера должен быть встроен в /приложение/Контроллер В каталогах имена классов и имена файлов должны наследоваться, если они должны быть согласованными Lib\Контроллер Класс, пример:
json(["code" => 200, "msg" => "success"]);
}
// Call Template
public function index2()
{
$a = "test";
// Output / APP / resources / views directory index. blade. PHP template with parameter $a. Support. Stitching template paths (as in the template engine section of laravel)
return $this->view("index",["a" => $a]);
// You can also call the view function directly
return view("admin.index",["a" => $a]);
}
}2. Получение параметров
// Get get parameters
$this - > request - > get ();// Get all get parameters: array
This - > request - > get ("name"); and // parametric string to get the parameter with key as name: string
This - > request - > get (["name", "age"]); // Pass the parameter group to get the parameters with key as name and age:
// Get the post parameter
$this - > request - > post ();// Get all get parameters: array
This - > request - > post ("name"); and // parametric string, get the parameter with key as name: string
This - > request - > post (["name", "age"]); // Pass parameter group, get the parameters of key as name and age: array
//Get uploaded files
$this - > request - > getFiles (); // Get all
$this - > request - > getFile ("image"); // Get the specified file
//File upload
//------- File - [Path] (based on / resources / uploads /) - [New File Name] (default is randomly generated)
UploadFile ($file,'banner','test.png'); //Upload file method developers can also write their own upload operations without this methodкрюк
1. Чтобы создать крючок, файл крючка должен быть встроен в /приложение/Крюк В каталогах имена классов и имена файлов должны наследоваться, если они должны быть согласованными Lib\Базовый крюк Класс, пример:
write ('INFO', $name,'Start Successfully', {ip}: {$port},'at','date ('Y-m-d H: i: s');
}
public function open($server,$fd){
// You can bind user ID and FD when a websocket link succeeds here
}
public function close($server,$fd){
// You can unbind the user ID and FD here after the websocket closes the link
}
}2. В файле конфигурации крючка /app/config/hook.php Зарегистрированный крючок
[
[\app\Hook\TestHook::class,'start'],
],
//Server::onOpen
'open' => [
[\app\Hook\TestHook::class,'open'],
],
//Server::onClose
'close' => [
[\app\Hook\TestHook::class,'close'],
],
];
3. Используйте крючки
//- Get hook service instances -- listening methods -- hook names -- parameters (...)------------------------------------------------------------------------------------------------------
Hook::getInstance()->listen("start",$this->name,$this->config['ip'],$this->config['port']);Задача задача
1. Создайте классы задач, файлы задач должны быть созданы в /приложении/Задача В каталоге имя класса должно совпадать с именем файла.
server->connections as $client_fd){
if($fd != $client_fd && $this->server->exist($client_fd)){
// Loop out messages to clients, excluding sender FD
$this->server->push($client_fd,$data);
$fds[] = $client_fd;
}
}
Return "Notification has been sent to [. join (","$fds)."]:"$data;
}
}2. Задачи доставки в контроллерах
//------------------- Get task example - ----------------------------------- Delivery task - --------------------- Task class - --------------------------- Method - ----------------- Parameters \Lib\Task::getInstance()->setServer($this->server)->delivery(\app\Task\Notice::class,'ToAll',[1,"123"]);
Веб-карман
1. Откройте сервер websocket, настройте .env файл ТИП_СЕРВЕРА=websocket В этой среде конфигурации HTTP можно одновременно отслеживать
2. Определите маршрутизацию, обратитесь к разделу маршрутизация документов в файле конфигурации маршрутизации /конфигурация/ /конфигурация/ , веб-сайт
3. Пример контроллера
FD client unique label
//$this - > server websocket server object (the function provided by this object refers to the swoole document)
//
$data = Hahaha I'm a message;
$data2 = "This is a group message through task task";
$this->server->push($this->fd,$data);
//Delivery of asynchronous tasks
$this->task->delivery (\app\Task\Notice::class,'ToAll',[$this->fd,$data2]);
}
}4. Передний конец пропускается (есть лезвие ws. PHP-файл в каталоге просмотра, который можно использовать для тестирования websocket)…
база данных
Внедрение базы данных laravel Фрейм Осветить\Базу данных Приятель, который знает ларавеля, может сделать это очень быстро.
1. Конструктор Запросов, Справочные Документы
where('id',1)->first();
}
}2. Модель, Справочный Документ
namespace app\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $table = 'user';
}Испытание давлением
- Вызовите метод вывода JSON в рамках и выведите следующее:
{
"word": "hello world"
}- Стресс-тест с инструкцией запроса в методе
public function index(){
$res = DB::table('user')->where('id',"=","1")->first();
return $this->json($res);
}Оригинал: “https://developpaper.com/high-performance-php-framework-based-on-swoole-for-light-php/”