#sockets #google-apps-script #google-apps
#сокеты #google-apps-script #google-приложения
Вопрос:
У меня есть скрипт Google Apps, привязанный к Google Sheet, и я опубликовал его как веб-приложение. Он ограничен определенным рабочим пространством Google. Этот Google Sheet является своего рода импровизированной базой данных для этого веб-приложения и меняется со временем. Я хотел бы отправить обновленные данные всем клиентам после изменения таблицы Google. Возможно ли это? Мне не нужен триггер для редактирования, поскольку я знаю в скрипте, когда я добавляю новые данные, так что сейчас самое время отправить новые данные.
В принципе, тот же вопрос можно сформулировать следующим образом: мы знаем, что можем выполнить функцию на стороне сервера google.script.run
с помощью клиента, но возможно ли также выполнить функцию на стороне клиента с сервера, т.Е. Сценарий приложений?
Мой текущий обходной путь — это клиентская часть setInterval
, которая проверяет наличие обновлений на стороне сервера (и извлекает их с помощью successHandler) каждые 30 секунд или около того. Это работает, но не оптимально.
Комментарии:
1. Невозможно выполнить функцию на стороне клиента с сервера, если она не была впервые инициирована клиентом и не отвечает обратным вызовом. Я думаю, что опрос — ваш единственный вариант.
2. Ваши клиенты могут получить доступ к веб-приложению и сами получать данные, если они соответствуют требованиям вашего развертывания.
3. Раньше вы могли бы сделать это с помощью GCM (Google Cloud Messaging), но эта служба устарела и была удалена в пользу FCM (Firebase Cloud Messaging). FCM использует API web Push, для которого требуются работники службы. К сожалению, веб-приложения GAS в настоящее время не поддерживают сервисных работников. Итак, как заявил @Cooper, вам нужно вернуться к модели «извлечения», в которой вы периодически опрашиваете базу данных на предмет изменений.
4. Хорошо, спасибо. Итак, этот «опрос» — это обходной путь, который я описал в последнем абзаце.
Ответ №1:
Просто чтобы отметить это как ответ. Купер пишет в комментариях:
«Невозможно выполнить функцию на стороне клиента с сервера, если она не была впервые инициирована клиентом и не отвечает обратным вызовом. Я думаю, что опрос — ваш единственный вариант «.