我一直在使用交叉開關,我喜歡它。我對運行連接到外部路由器的工作人員的最佳方式有疑問。我正在使用「crossbar start」並創建一個連接到路由器的配置文件,這很好。Crossbar.io外部工作者配置
最近我的要求已經改變,我想通過環境變量將路由器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
不是一個解決方案,但是如果您將組件作爲guest虛擬機而不是容器運行,則可以傳遞所需的數據 - 請參閱http://crossbar.io/docs/Process-Environments/ – gzost