Как показывать лог пересборки сервера в браузере через systemfd
systemfd сохраняет слушающий сокет открытым, пока watchexec следит за исходниками и пересобирает сервер. Во время компиляции запросы некому обрабатывать, поэтому вместо пустой страницы socat передаёт в браузер поток лога сборки.
Bash-функция создаёт минимальный HTTP-ответ, а tee одновременно выводит результат cargo build в терминал и дописывает его в файл. socat читает новые байты из файла через уже открытый сокет. После успешной сборки скрипт завершает socat и запускает новую версию сервера. xterm.js возвращает терминальные цвета, а fetch позволяет корректно обработать закрытие потока и подключиться снова.
В готовом скрипте dev.sh разобрана вся связка. Пример написан для Rust, но подход переносится на другие компилируемые бэкенды, если они поддерживают наследование слушающего сокета.
Post #2987
412
