Поиск публикаций
Муниципальные услуги

Получите услугу онлайн

Перейти

HTTP Сервер

 Создание сервера

httpСервер.создатьСервер(обработчик)

Создаёт новый HTTP-сервер с указанной функцией-обработчиком. Обработчик будет вызываться при каждом входящем запросе.

ПараметрТипОписание
обработчикфункцияФункция, принимающая объект запроса и возвращающая строку ответа
Возвращает: объект сервера (дескриптор)
Пример:
$server = httpСервер.создатьСервер(функция($req) {
    возврат "Привет, мир!";
});

 Запуск сервера

httpСервер.слушать(сервер, порт, колбэк)

Запускает сервер на указанном порту. Колбэк вызывается после успешного запуска или при ошибке.

ПараметрТипОписание
серверобъектОбъект, возвращённый создатьСервер
портчислоНомер порта (например, 8080)
колбэкфункцияПринимает один логический аргумент: истина — успех, ложь — ошибка
Возвращает: ничего
Пример:
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, если не возникает ошибок.

Внутри обработчика можно выполнять любые действия: читать файлы, обращаться к базам данных, вызывать другие модули. Ответ должен быть строкой.

Важно: Сервер поддерживает только текстовые ответы (HTML, JSON, plain text). Для отправки бинарных данных используйте кодирование в Base64 или другие методы.
Пример обработчика с маршрутизацией:
$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");
    }
});