К содержанию
fohbookбета/ TouchDesigner

Веб: HTTP, WebSocket, MQTT, браузер

Web Client для запросов наружу, Web Server для своего API и пульта в браузере, MQTT для датчиков, Web Render TOP для страницы как картинки.

Ветка вашего пульта:
Быстрый выбор:

TouchDesigner работает с HTTP в обе стороны и показывает веб-страницы текстурой, а значит, достаёт до внешних сервисов и даёт управлять собой удалённо.

Оператор Для чего
Web Client DAT Запрос наружу: GET, POST, PUT, DELETE и другие методы; REST API, скачивание, вебхуки
Web Server DAT Свой HTTP- и WebSocket-сервер внутри проекта, при желании с TLS
WebSocket DAT Клиент WebSocket
MQTT Client DAT Обмен с устройствами через MQTT-брокер
Web Render TOP Рендер веб-страницы в текстуру
JSON DAT Выбрать нужное из ответа по запросу JSONPath — DAT

Запрос наружу

Web Client DAT асинхронный: запрос уходит, ответ приходит в колбэк, и кадр не ждёт. Отправляют кнопкой Request или op('web1').request(url, 'GET'), который возвращает номер соединения. Есть Timeout и страница Authentication с Basic, Digest, OAuth1 и OAuth2.

def onResponse(webClientDAT, statusCode, headerDict, data, id):
    import json
    payload = json.loads(data)
    op('table_out')[1, 'value'] = payload['temperature']
    return

Точные аргументы колбэков есть в заготовке, которую DAT создаёт вместе с собой. Так берут погоду и время для инсталляции, данные с сервера площадки, ответы LLM и генеративных сервисов, шлют телеметрию.

Сеть пропадёт

У любого внешнего запроса должны быть тайм-аут и поведение по умолчанию. Инсталляция, которая ждёт сервер, чтобы показать картинку, однажды покажет пустой экран.

Свой сервер

Web Server DAT поднимает HTTP и WebSocket на порту из Port, а на странице Secure включается TLS с ключом и сертификатом. Работа идёт в колбэках: onHTTPRequest получает запрос и заполняет ответ, onWebSocketOpen, onWebSocketReceiveText и onWebSocketClose обслуживают клиентов.

def onHTTPRequest(webServerDAT, request, response):
    response['statusCode'] = 200
    response['statusReason'] = 'OK'
    response['data'] = op('state').text
    return response

На этом делают пульт в браузере телефона вместо VNC, приём вебхуков, страницу для зрителей с голосованием или вводом текста и API проекта для соседних машин. MQTT Client DAT подключается к брокеру, подписывается на темы и публикует сообщения — так инсталляция обменивается данными с датчиками, микроконтроллерами и умным зданием.

Страница как текстура

Web Render TOP открывает страницу в отдельном процессе Chromium (CEF) и получает картинку через общую память. Так в кадр попадают готовые библиотеки графиков и карт, сложная вёрстка и живые дашборды. В ветке 2025.30000 браузер обновлён до Chromium 132, появились DPI Scaling и таблица для правки заголовков запроса, чтобы рендерить страницы с авторизацией, а один кэш двумя Web Render TOP больше не делят — второй выдаст ошибку. Это полноценный браузер и нагружает систему соответственно, поэтому статичное рендерят один раз.

Телефон как пульт

Web Server DAT, HTML-страница со слайдерами и WebSocket на приём — и у оператора пульт без установки чего-либо, без MIDI и OSC-приложений.

Нашли в статье ошибку, устаревшее или непонятное место?

рядом по смыслу