Crossbar.io Конфигурация внешнего работника
Я использовал перекладину в течение некоторого времени, и мне это нравится. У меня есть вопрос о лучшем способе запуска рабочих, которые будут подключаться к внешнему маршрутизатору. Я использовал "запуск с перекладиной" и создавал файл конфигурации, который подключался к маршрутизатору, и это прекрасно работало.
Недавно мои требования изменились, и я хотел бы передать URL-адрес и область маршрутизатора в файл конфигурации через переменные среды. После проб и ошибок я пришел к выводу, что это невозможно с текущей реализацией XBAR.
Затем я посмотрел на создание приложения Runner, используя следующее, где я получил область и URL-адрес из конфигурации Vars
runner = ApplicationRunner(url=url, realm=realm)
runner.run(AppSession)
Это работает, но потом я заметил, что мой сервер периодически отключался. После первопричины я понял, что обратный прокси-сервер истекает время соединения через 1 час бездействия. Просматривая логи сервера, я получил обратный вызов onDisconnect. Глядя на документацию по запуску приложения XBAR, он утверждает следующее
This class is a convenience tool mainly for development and quick hosting
of WAMP application components.
У меня есть служба, запущенная в сценарии runit в качестве демона. Некоторые быстрые исправления, которые я придумал,
- Убейте бегуна и дайте демону перезапустить сервис
- Явно выполнить процесс присоединения к любым отключениям
Все это начинало казаться по-настоящему хакерским, учитывая, что ребята из XBAR прямо заявляют, что ApplicationRunner - это инструмент разработки. Кто-нибудь знает, есть ли что-то, что я могу использовать, кроме приложения, запускающего приложение, ИЛИ как я могу получить переменные окружения в файле config.json?
В качестве временного решения я использую sed. Вот мой конфигурационный файл
{
"controller": {
},
"workers": [
{
"type": "container",
"options": {
"pythonpath": [".."]
},
"components": [
{
"type": "class",
"classname": "src.app_session.AppSession",
"realm": "%%%ROUTER_REALM%%%",
"transport": {
"type": "websocket",
"endpoint": {
"type": "tcp",
"host": "%%%ROUTER_HOST%%%",
"port": %%%ROUTER_PORT%%%
},
"url": "%%%ROUTER_PROTOCOL%%%://%%%ROUTER_HOST%%%/ws"
}
}
]
}
]
}
И мой скрипт runit
#!/bin/bash
# Update the ROUTER config parameters
sed -i -e "s/%%%ROUTER_HOST%%%/${ROUTER_HOST}/g" /app/.crossbar/config.json
sed -i -e "s/%%%ROUTER_PORT%%%/${ROUTER_PORT}/g" /app/.crossbar/config.json
sed -i -e "s/%%%ROUTER_REALM%%%/${ROUTER_REALM}/g" /app/.crossbar/config.json
sed -i -e "s/%%%ROUTER_PROTOCOL%%%/${ROUTER_PROTOCOL}/g" /app/.crossbar/config.json
cat /app/.crossbar/config.json
cd /app/
exec crossbar start
1 ответ
В Crossbar.io действительно нет механизма, который бы делал то, что вы хотите. Со стороны проекта нет планов реализовать это как функцию. Мы хотим сосредоточиться на API управления, который позволит динамически управлять Crossbar.io.