我一直在使用横杆一段时间,我喜欢它。我有一个关于运行将连接到外部路由器的工作人员的最佳方式的问题。我正在使用“crossbar start”并创建一个连接到路由器的配置文件,效果很好。
最近我的要求已更改为我想通过环境变量将路由器 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