Поиск публикаций
HTTP Сервер
Содержание
Создание сервера
httpСервер.создатьСервер(обработчик)
Создаёт новый HTTP-сервер с указанной функцией-обработчиком. Обработчик будет вызываться при каждом входящем запросе.
$server = httpСервер.создатьСервер(функция($req) { возврат "Привет, мир!"; });
Запуск сервера
httpСервер.слушать(сервер, порт, колбэк)
Запускает сервер на указанном порту. Колбэк вызывается после успешного запуска или при ошибке.
httpСервер.слушать($server, 8080, функция($ok) { если ($ok) { вывод("Сервер запущен"); } иначе { вывод("Ошибка запуска"); } });
Остановка сервера
httpСервер.закрыть(сервер)
Останавливает работающий сервер. После вызова сервер перестаёт принимать новые соединения.
httpСервер.закрыть($server);
Объект запроса
Функция-обработчик получает объект запроса, содержащий информацию о клиентском запросе.
url— строка с полным URL (включая путь и параметры запроса). Например,"/hello?name=World".method— строка с HTTP-методом (например,"GET","POST").headers— объект с заголовками запроса (доступны по ключу, например,$req.headers["content-type"]).body— строка с телом запроса (для POST/PUT).
Для извлечения пути из URL можно использовать строки.позиция и строки.подстрока, как показано в примере.
Функция-обработчик
Обработчик должен возвращать строку, которая будет отправлена клиенту в качестве тела ответа. HTTP-статус всегда 200, если не возникает ошибок.
Внутри обработчика можно выполнять любые действия: читать файлы, обращаться к базам данных, вызывать другие модули. Ответ должен быть строкой.
$handler = функция($req) { $path = $req.url; // удаляем параметры запроса $pos = строки.позиция($path, "?"); если ($pos != -1) { $path = строки.подстрока($path, 0, $pos); } если ($path == "/") { возврат "Главная страница"; } иначе если ($path == "/hello") { возврат "Привет, мир!"; } иначе { возврат "404 Страница не найдена"; } };
Полный пример
Ниже приведён полный скрипт, демонстрирующий создание HTTP-сервера с тремя маршрутами и возможностью остановки.
// ============================================================ // Простой HTTP-сервер с маршрутизацией // ============================================================ $port = 8080; $handler = функция($req) { $full = $req.url; $qpos = строки.позиция($full, "?"); $path = $full; если ($qpos != -1) { $path = строки.подстрока($full, 0, $qpos); } вывод("Запрос: " + $path + "\n"); если ($path == "/") { возврат "Главная страница"; } иначе если ($path == "/hello") { возврат "Привет, мир!"; } иначе если ($path == "/stop") { вывод("Остановка сервера...\n"); httpСервер.закрыть($server); возврат "Сервер остановлен"; } иначе { возврат "404 Страница не найдена"; } }; $server = httpСервер.создатьСервер($handler); httpСервер.слушать($server, $port, функция($ok) { если ($ok) { вывод("Сервер запущен на порту " + строка($port) + "\n"); вывод("Маршруты:\n GET /\n GET /hello\n GET /stop\n"); } иначе { вывод("Ошибка запуска\n"); } });