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.

Другие вопросы по тегам