私はクロスバーをしばらく使用しており、気に入っています。外部ルーターに接続するワーカーを実行する最良の方法について質問があります。「クロスバースタート」を使用して、ルーターに接続する構成ファイルを作成していましたが、これはうまく機能しました。
最近、私の要件は、ルーターの URL とレルムを環境変数を介して構成ファイルに渡したい場所に変更されました。試行錯誤の結果、現在の XBAR 実装ではこれは不可能であるという結論に達しました。
次に、次を使用してアプリケーションランナーを作成することを検討しました。ここでは、構成変数からレルムと URL を取得しました。
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