Простой сайт на 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",&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.

ссылка на оригинал статьи http://habrahabr.ru/post/181548/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *