При использовании параметров сборки по умолчанию,
функция main()
для приложения vibe.d назначается
при помощи специального конструктора модуля,
shared static this()
:
import vibe.d;
shared static this() {
// код Vibe.d
}
Конструктор модуля исполняется один раз перед вызовом
main()
. Vibe.d содержит собственную функцию
main()
и скрывает от пользовательского кода
цикл обработки событий и всю остальную "работу
по дому".
Vibe.d использует волокна для обеспечения
асинхронного ввода/вывода: каждый раз, когда
вызов производится блокирующий вызов сокета
(например, недостаточно входящих данных),
текущее волокно исполняет функцию yield
, оставляя
тем самым возможность исполнения других операций.
Когда данные наконец поступят, мы просто возобновляем
исполнение:
// Возможна блокировка, но она происходит
// незаметно. Если сокет готов, vibe.d
// вернёт результат.
line = connection.readLine();
// Также возможна блокировка
connection.write(line);
Таким образом, код выглядит так, словно он синхронный, т.е. будет блокировать текущий поток, но на самом деле этого не происходит! Код выглядит чистым и опрятным, хотя на самом деле использует всю мощь асинхронного ввода/вывода, позволяя обрабатывать тысячи соединений на одном ядре процессора.
Все составляющие vibe.d используют операции с сокетами на основе волокон для того, чтобы вам не нужно было переживать о таких вещах, как блокировка всего приложения из-за одного медленного соединения с сервером MongoDB.
Не забудьте ознакомиться с примером, демонстрирующим, как создать простой TCP эхо-сервер.