我一直在使用交叉开关,我喜欢它。我对运行连接到外部路由器的工作人员的最佳方式有疑问。我正在使用“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