Простой сайт на D
На хабре уже упоминался язык D. Но популярности он не получил из-за невозможности практического использования, а точнее большинству он просто не нужен.Сегодня хочу рассказать вам об одном полезном фреймворке для D. Большинство программистов хоть раз писали веб-сервер на компилируемом языке, но эти языки слишком низкоуровневы для такой задачи. Для такой задачи можно использовать этот язык в связке с фреймворком vibe.d; Установка 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», ℑ); //Добавили пару обработчиков 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.