Menu

Основи та Асинхронний Ввід/Вивід

Використовуючи встановлені за замовчуванням параметри, функція main() додатку vibe.d визначається спеціальним особливим конструктором shared static this():

import vibe.d;
shared static this() {
    // Вставте Vibe.d код сюди
}

Особливий конструктор передує функції main() і виконується лише один раз. Vibe.d забезпечує свою власну функцію main() та приховує весь цикл операцій та буденних деталей від коду користувача.

Vibe.d використовує нитки для реалізації асинхронного вводу/виводу: кожен виклик сокета блокуватиметься (наприклад, за відсутності даних для опрацювання), тому що діюча нитка поступається поточним виконавчим контекстом кожній наступній операції. Коли дані доступні, нам тільки залишається поновити роботу:

// Можливе блокування, але прозоре.
// Якщо сокет готовий, vibe.d
// переконується у тому, що
// ми повернемося сюди.
line = connection.readLine();
// Також можливе блокування 
connection.write(line);

Код виглядає як синхронний і, здавалося б, блокуватиме поточний потік, але це не так! Код виглядає чистим і лаконічним, але все ж таки використовує силу асинхронного вводу/виводу, що уможливлює тисячі з'єднань на одному ядрі.

Всі функції vibe.d використовують нитку на основі асинхронних операцій сокета, так що вам не доведеться турбуватися стосовно того, що єдине повільне з’єднання сервера MongoDB блокуватиме ваш додаток.

Зверніть увагу на приклад впровадження echo-сервера на основі простого TCP.

rdmd playground.d