Оперируем двоичными данными в Node.js. Часть 1: отправка данных
Итак, со времени написания предыдущей статьи я лучше разобрался с механизмом использования двоичных данных в Node.js. Механизм этот не то чтобы очевидный, но он есть, и он работает. Как я уже упоминал, оперирование двоичными данными критически важно для использования двоичных протоколов.
Этой статьи могло не быть без кода коннектора Postgres <=> Node.js, написанного товарищем creationix. Спасибо ему за отличные исходники, в которых вполне реально разобраться без обращения непосредственно к автору
Итак, предыдущий способ (с использованием PHP.js) потерпел неудачу. В Google-группе nodejs мне посоветовали взглянуть на коннектор Postgres: это как раз реализация бинарного протокола для Node.js. После нескольких часов хакинга стало понятно, как работает обмен двоичными данными в Node. Итак, всё по порядку:
Оперируем двоичными данными в Node.js. Часть 2: получение ответа
В предыдущей статье мы собрали и отправили серверу запрос, и получили двоичную строку в ответ. Самое время эту строку препарировать ![]()
Разбираем ответ сервера
Структура ответа в Sphinx довольно проста, и понятна даже из кода PHP-коннектора (собственно, так я его и портировал). Сначала 8 байт заголовка: статус-код (int16), версия (int16), длина оставшейся части заголовка (int32). Последнее нам нужно разве что для проверки, т.к. tcp-модуль node всё равно забирает ответ Sphinx целиком и отдаёт его в callback уже склеенным.