node.js

Dec 22, 2012 00:05

Поскольку у меня сейчас третий месяц каникул и осмысления своего профессионального будущего, а сидеть без дела скучно, я затеял небольшой проект для фана в абсолютно новой для себя области. О подробностях пока говорить рано.

Среди прочего, проект влючает в себя создание некоторого специфического дивайса, который должен управляться через веб-интерфейс. Для удобства использования просто необходимо, чтобы события на сервере оперативно отображались в браузере, без перезагрузки страницы. Поддержки старых браузеров не требуется, поэтому я решил использовать технологию вебсокетов. Это означает, что страница постоянно держит открытое TCP соединение с сервером, через которое передаются нотификации от сервера к клиенту и обратно в полнодуплексном режиме.

Сервер выполняет относительно тяжелые рассчеты, общается напрямую с железкой и использует некоторые специфические библиотеки, и поначалу планировалось реализовать сервер на Си/С++. Поэтому я присматривался к встраиваемым веб-серверам на Си. Были опробованы libwebsockets и mongoose. К сожалению, библиотеки очень низкоуровневые - например HTTP заголовки приходится формировать вручную с помощью printf. Кроме того, модель «по треду на каждое открытое соединение» вызывала некоторые необоснованные опасения.

В общем, теперь матерый сишник осваивает ноду. Во-первых, из-за хорошей поддержки HTTP, а во-вторых, из-за асинхронности by design. По слухам, функциональная природа джаваскрипта делает callback-ориентированное программирование особенно приятным. Одно могу сказать точно - асинхронную логику приложения на Сишечке я изображать не готов, особенно в отсутствии адекватных библиотек.

Когда-то давно я написал модуль для nginx, весь из себя асинхронный. Но nginx это по сути фреймворк для разработки асинхронных сетевых приложений на Си. И логика там была относительно простая (резолвинг DNS, запрос к RADIUS серверу c повторами в случае неудачи, все).
Previous post Next post
Up