2015-09-25 60 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。