TL;DR: Підтримка Elixir веб-сервера Bandit для N2O без модифікацій. Приклад використання.
Головна причина реврайтів — це пошук оптимальної реалізації. COWBOY веб сервер був
довгий час головним і єдиним продакшин реді веб сервером для Erlang/OTP загалом і
для Elixir DSL зокрема. Як на мене час компіляції COWLIB занадто великий і тільки це одне
могло би бути причиною реврайта. Новий веб-сервер BANDIT цікавий тим, що дозволяє
уніфікувати HTTP і WebSocket ендпойнти в інтерфейсах PLUG. Так як N2O може працювати поверх чистого веб-сокет
сервера без HTTP ендпойнтів взагалі (їх можна сервити або з Github Pages або іншими веб-серверами,
які відгружають статичні асети (JS, CSS, HTML), я використовува спочатку безпосередні біндінги
THOUSAND_ISLAND (той самий автор, що і BANDIT), але зрештою вирішив закомітити
уніфікований підхід до HTTP та WebSocket ендпойтів який пропонує PLUG.
N2O Static
COWBOY_STATIC модуль заміняється безпосередньо на Plug.Static. Але в продакшині ми взагалі можемо
сервити сторінки без використання аплікейшин серверів.
N2O WebSocket
Щоб завернути THOUSAND_ISLAND в PLUG потрібно використати допоміжну бібліотеку WEBSOCK_ADAPTER,
з неї ми беремо тільки WebSocket Upgrade. Сам модуль є адаптером N2O для веб-сокет сервера
BANDIT (під капотом THOUSAND_ISLAND).
N2O Application
В головному файлі Erlang/OTP додатку стартуємо статичні і веб-сокет еднпойнти на різних портах.
Це обмеження BANDIT відрізняється від старих способів деплоя N2O на одному порті, але ніби
привносить більший порядочок в інфраструктуру.
N2O Deps
З залежностей N2O Bandit адаптер використовує тільки PLUG, BANDIT і WEBSOCK_ADAPTER.
COWBOY — вже для історичної сумісності.