На хабре уже упоминался язык D. Но популярности он не получил из-за невозможности практического использования, а точнее большинству он просто не нужен.Сегодня хочу рассказать вам об одном полезном фреймворке для D. Большинство программистов хоть раз писали веб-сервер на компилируемом языке, но эти языки слишком низкоуровневы для такой задачи. Для такой задачи можно использовать этот язык в связке с фреймворком vibe.d;
Установка dmd и vibe.d достаточна проста. При установке фреймворка под windows не забудьте прописать нужные пути в PATH
Для начала создадим проект.
Фреймворк сам создаст нужную структуру(3 папки и манифест)
./views — шаблоны
./public — статичные файлы, аля *.css,*.js
./src — исходный код приложения
В vibe есть неплохой шаблонизатор, немного спорный, но неплохой. Основан на шаблонизаторе JADE. CSS подключается в зависимости от обработчика, но стили желательно держать в папке public.Файлы шаблонов же следует держать в views.
Неоспоримый плюс vibed — это работа с проектами. Очень удобно работать из консоли, создание, компиляция и дебаг проекта. Себе наделал пару скриптов для Notepad++.
Сборка проекта(разумеется в папке проекта).
После компиляции создается исполняемый файл, подключаются нужные библиотеки. Еще один плюс этого фреймворка — Батарейки в комплекте. Библиотек реально хватает для всего. При том, это не только написание cgi приложений, это полноценный асинхроный сервер. С развитием проекта предполагается развитие балансировщика нагрузки(если правильно понял).
Плюсы: Скорость, Относительная простота, Низкий порог вхождения, Большая комплектация, Гибкость(работает не только с http, но и напрямую с tcp)
Минусы: Сырость проекта и языка, маленькое сообщество
В целом фреймворк вполне неплох и удобен. В сочетании с удобным языком думаю появится новый конкурент GO,node.js.
Установка dmd и vibe.d достаточна проста. При установке фреймворка под windows не забудьте прописать нужные пути в PATH
Для начала создадим проект.
vibe init project_name
Фреймворк сам создаст нужную структуру(3 папки и манифест)
./views — шаблоны
./public — статичные файлы, аля *.css,*.js
./src — исходный код приложения
//app.d
import vibe.d;
import std.stdio;
import std.string;
import std.file;
import std.array;
// Подключаем нужны библиотеки
void image (HTTPServerRequest req, HTTPServerResponse res)
{
auto file = format("./public/images/%s", req.params["f"]);
if(exists(file))
{
auto image = cast(ubyte[]) read(file);
res.writeBody(image,"image");
}
else
{
res.writeBody("Not Found","text/plain");
}
}
// Создаем обработчика , который будет отдавать изображения
void style (HTTPServerRequest req, HTTPServerResponse res)
{
auto css = readText(format("./public/styles/%s", req.params["f"]));
res.writeBody(css,"text/css");
}
// Создаем обработчика , который будет CSS
void error(HTTPServerRequest req, HTTPServerResponse res, HTTPServerErrorInfo error)
{
res.writeBody("Some error, man","text/plain");
}
// Создаем обработчика ошибок
void index_req(HTTPServerRequest req, HTTPServerResponse res)
{
auto request = req.params["r"];
// Получаем текст запроса
res.renderCompat!("index.dt", HTTPServerRequest, "req",string,"title")(req,request);
// Рендерим шаблон с передачей в него шаблона.
}
void index(HTTPServerRequest req, HTTPServerResponse res)
{
res.renderCompat!("index.dt", HTTPServerRequest, "req",string,"title")(req,"Main page");
// Рендерим шаблон с передачей в него шаблона.
}
// Создаем обработчика , который будет отдавать главную страницу со всякими плюшками.
shared static this()
{
auto settings = new HttpServerSettings;
settings.port = 8080;
// Подняли http сервер на порту 8080
//settings.errorPageHandler = toDelegate(&error);
// Подключили обработчик ошибок
// Создаем экземляр роутера(он выбирает на какой обработчик отправить тот или иной запрос)
auto router = new URLRouter;
router.get("/:r",&index_req);
router.get("/",&index);
router.get("/style/:f",&style);
router.get("/images/:f",&image);
//Добавили пару обработчиков
listenHTTP(settings,router);
//Запустили сервер
}
В vibe есть неплохой шаблонизатор, немного спорный, но неплохой. Основан на шаблонизаторе JADE. CSS подключается в зависимости от обработчика, но стили желательно держать в папке public.Файлы шаблонов же следует держать в views.
!!! 5
html
head
title Hi world
meta(charset="utf-8")
link(rel="stylesheet",href="/style/main.css")
body
div#menu
a#logo(href="/")
div.links
a(href="/main")Main page
a(href="/about")About
a(href="/some")Some
div#content
div.article
h3 #{title}
p Sorry,not founded
Неоспоримый плюс vibed — это работа с проектами. Очень удобно работать из консоли, создание, компиляция и дебаг проекта. Себе наделал пару скриптов для Notepad++.
vibe build
Сборка проекта(разумеется в папке проекта).
После компиляции создается исполняемый файл, подключаются нужные библиотеки. Еще один плюс этого фреймворка — Батарейки в комплекте. Библиотек реально хватает для всего. При том, это не только написание cgi приложений, это полноценный асинхроный сервер. С развитием проекта предполагается развитие балансировщика нагрузки(если правильно понял).
Плюсы: Скорость, Относительная простота, Низкий порог вхождения, Большая комплектация, Гибкость(работает не только с http, но и напрямую с tcp)
Минусы: Сырость проекта и языка, маленькое сообщество
В целом фреймворк вполне неплох и удобен. В сочетании с удобным языком думаю появится новый конкурент GO,node.js.