2015-09-25 68 views
1

我一直在使用交叉開關,我喜歡它。我對運行連接到外部路由器的工作人員的最佳方式有疑問。我正在使用「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 
+0

不是一個解決方案,但是如果您將組件作爲guest虛擬機而不是容器運行,則可以傳遞所需的數據 - 請參閱http://crossbar.io/docs/Process-Environments/ – gzost

回答

0

確實存在與Crossbar.io沒有任何機制可以做你想做的。從項目的角度來看,沒有計劃將其作爲一項功能來實施。我們希望專注於管理API,從而可以動態管理Crossbar.io。