问题标签 [crossbar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 与 crossbar.io 的连接挂起或断开连接
我正在尝试使用带有高速公路的 Python [Twisted] 连接到远程主机上的交叉开关
我正在使用来自 PubSub 的修改示例代码:
我在我的本地主机上运行了一个交叉开关实例进行测试,当我访问它时,一切正常。
但是如果我尝试连接到其他主机,会发生两件事: 如果它是安全端口:
(会话永远不会附加,程序挂起)
如果它是一个不安全的端口:
(在会话连接之前,连接会自动将我踢出
我尝试连接的主机有 8080 用于安全端口和 8081 用于不安全。所以我改变的只是:
我想知道我是否遗漏了有关 WAMP 连接的明显内容,或者这可能是我尝试连接的交叉开关实例上的配置问题。
wamp - 从远程过程返回一个数组
我使用 Thruway 客户端注册了一个 RCP 程序,并使用 Autohahn 客户端调用它。
我面临的问题是,当被调用者从过程return array();
中返回一个空数组时,调用者会收到该null
值。
当被调用者返回一个单元素数组return array(['foo' => 'bar', 'baz' => 'quux']);
时,调用者接收到未包装在数组中的对象。
并且只返回一个数组中的多个对象按预期工作:调用者接收一个对象数组。
这绝对不方便且不直观:我必须检查响应是否已定义,是否为数组...我希望调用者接收我实际从被调用者发送的内容:一个空数组,一个元素的数组和多个元素的数组。我发送一个数组 - 我希望客户端得到一个数组。
问题是:如何解决这种行为?我什至不确定这两个客户端中的哪一个配置错误。或者这可以在路由器上配置(我使用 Crossbar 作为路由器)。或者这可能是协议的预期实现(这太糟糕了)。
python - 将 pycurl 导入 crossbar.io 错误
好的,所以我想使用 crossbar.io 并在 python 中构建一个应用程序。
我可以让演示工作,但是我的应用程序需要分离使用 pycurl 来监听长期 http 连接的线程。
分别,crossbar.io 代码和 pycurl 代码工作,但是当我执行以下操作时,我得到“找不到导入”:
legacy_Listener 包含带有“import pycurl”的线程代码(这个模块本身就很好用)
现在,一旦我将 crossbar.io 示例代码与我自己的代码混合在一起,我就会收到以下错误:
2016-04-09T20:42:13+0100 [控制器 26219] ID 为“worker2”和 PID 26333 的容器已启动 2016-04-09T20:42:13+0100 [容器 26333] 组件加载失败 Traceback(最近一次调用最后一次) :文件“/opt/crossbar/site-packages/autobahn/wamp/websocket.py”,第 90 行,onMessage self._session.onMessage(msg) 文件“/opt/crossbar/site-packages/autobahn/wamp/protocol .py”,第 809 行,onMessage on_reply = txaio.as_future(endpoint.fn, *invoke_args, **invoke_kwargs) 文件“/opt/crossbar/site-packages/txaio/tx.py”,第 339 行,as_future 返回MaybeDeferred(fun, *args, **kwargs) 文件“/opt/crossbar/site-packages/twisted/internet/defer.py”,第 150 行,在 MaybeDeferred 结果 = f(*args, **kw) --- --- 文件“/opt/crossbar/site-packages/crossbar/worker/container.py”,第 192 行,在 start_container_component create_component = _appsession_loader(config) 文件“/opt/crossbar/site-packages/crossbar/worker/在里面.py",第 74 行,在 _appsession_loader pythonpath=sys.path autobahn.wamp.exception.ApplicationError: ApplicationError(error=, args=['Failed to import class \'hello.AppSession\'\nTraceback (最近一次调用最后) :\n 文件“/opt/crossbar/site-packages/autobahn/wamp/protocol.py”,第 809 行,在 onMessage\n on_reply = txaio.as_future(endpoint.fn, *invoke_args, **invoke_kwargs)\n 文件"/opt/crossbar/site-packages/txaio/tx.py",第 339 行,在 as_future 中\n return maybeDeferred(fun, *args, **kwargs)\n 文件 "/opt/crossbar/site-packages/twisted /internet/defer.py”,第 150 行,在可能延迟中\n 结果 = f(*args, **kw)\n 文件“/opt/crossbar/site-packages/crossbar/worker/container.py”,第 192 行,在 start_container_component\n create_component = _appsession_loader(config)\n--- ---\n 文件“/opt/crossbar/site-packages/crossbar/worker/init .py",第 58 行,在 _appsession_loader\n 模块 = importlib.import_module(module_name)\n 文件 "/opt/crossbar/lib-python/2.7/importlib/init .py ",第 37 行,在 import_module\n 导入(名称)\n 文件“/home/osboxes/qbtwebmon/hello.py”,第 36 行,\n from legacy_misc import Legacy_Listener\nexceptions.ImportError: No module named legacy_misc\n'], kwargs={'pythonpath': [u'/home/osboxes/qbtwebmon', '/opt/crossbar/site-packages/crossbar/worker', '/opt/crossbar/bin', '/opt/crossbar/lib_pypy/ extensions', '/opt/crossbar/lib_pypy', '/opt/crossbar/lib-python/2.7', '/opt/crossbar/lib-python/2.7/lib-tk', '/opt/crossbar/lib-python /2.7/plat-linux2', '/opt/crossbar/site-packages', '/home/osboxes/qbtwebmon/wamp_venv/lib/python2.7/site-packages']}, enc_algo=None)
2016-04-09T20:42:13+0100 [容器 26333] Python 模块搜索路径:2016-04-09T20:42:13+0100 [容器 26333] /home/osboxes/qbtwebmon 2016-04-09T20:42:13 +0100 [容器 26333] /opt/crossbar/site-packages/crossbar/worker 2016-04-09T20:42:13+0100 [容器 26333] /opt/crossbar/bin 2016-04-09T20:42:13+0100 [容器 26333] /opt/crossbar/lib_pypy/扩展 2016-04-09T20:42:13+0100 [容器 26333] /opt/crossbar/lib_pypy 2016-04-09T20:42:13+0100 [容器 26333] /opt/crossbar/lib-python/2.7 2016-04- 09T20:42:13+0100 [容器 26333] /opt/crossbar/lib-python/2.7/lib-tk 2016-04-09T20:42:13+0100 [容器 26333] /opt/crossbar/lib-python/2.7 /plat-linux2 2016-04-09T20:42:13+0100 [容器 26333] /opt/crossbar/site-packages 2016-04-09T20:42:13+0100 [容器 26333] /home/osboxes/qbtwebmon/wamp_venv /lib/python2.7/site-packages 2016-04-09T20:42:13+0100 [容器 26333] NativeWorkerSession.onUserError 2016-04-09T20:42:13+0100 [控制器 26219] crossbar.error.class_import_failed: 失败导入类 'hello.AppSession' Traceback(最近一次调用最后):文件“/opt/crossbar/site-packages/autobahn/wamp/protocol.py”,第 809 行,在 onMessage on_reply = txaio.as_future(endpoint.fn, *invoke_args, **invoke_kwargs) 文件“/opt/crossbar/site-packages/txaio/tx.py”,第 339 行,在 as_future 中返回可能延迟(有趣,*args, **kwargs) 文件“/opt/crossbar/site-packages/twisted/internet/defer.py”,第 150 行,在可能延迟结果 = f(*args, **kw) 文件“/opt/crossbar/site-packages /crossbar/worker/container.py”,第 192 行,在 start_container_component create_component = _appsession_loader(config) --- --- 文件“/opt/crossbar/site-packages/crossbar/worker/第 150 行,在可能延迟结果中 = f(*args, **kw) 文件“/opt/crossbar/site-packages/crossbar/worker/container.py”,第 192 行,在 start_container_component create_component = _appsession_loader(config) --- --- 文件“/opt/crossbar/site-packages/crossbar/worker/第 150 行,在可能延迟结果中 = f(*args, **kw) 文件“/opt/crossbar/site-packages/crossbar/worker/container.py”,第 192 行,在 start_container_component create_component = _appsession_loader(config) --- --- 文件“/opt/crossbar/site-packages/crossbar/worker/init .py”,第 58 行,在 _appsession_loader 模块 = importlib.import_module(module_name) 文件中“/opt/crossbar/lib-python/2.7/importlib/init .py ”,第 37 行,在 import_module 导入(名称)文件中“/ home/osboxes/qbtwebmon/hello.py”,第 36 行,从 legacy_misc 导入 Legacy_Listener exceptions.ImportError: No module named legacy_misc
2016-04-09T20:42:13+0100 [控制器 26219] 将 TERM 发送到子进程 26272 2016-04-09T20:42:13+0100 [控制器 26219] 等待 26272 退出...
现在经过数小时的谷歌搜索,我意识到 pycurl 在 pypy 中不起作用,这是 crossbar.io 正在运行的,但我想知道是否有办法说“使用 pypy”来运行交叉开关和“使用 cpython”运行项目?
最后,这不是路径问题,我已附加并对此进行了测试。
websocket - 如何在 autobahn.ws 中获取订阅客户的列表?
现在我正在使用 wamp-protocol、crossbar.io、autobahn.ws 开发聊天。我们只有两个客户的房间。我需要定义其他客户端是否在房间里,如果它在我发布新消息,否则我向 GCM 发出请求。每个房间都有自己的 uri,例如“com.example.chat”。
这就是为什么我需要在指定的 uri 'com.example.chat.' 中获取客户列表。
python - Crossbar ImportError:无法导入名称 parseWsUrl
- 创建的虚拟环境:
virtualenv my_test
- 安装横梁:
source bin/activate && pip install crossbar
以下是软件包:
Jinja2==2.8 MarkupSafe==0.23 PyNaCl==1.0.1 PyTrie==0.2 PyYAML==3.11 Pygments==2.1.3 Twisted==16.1.1 argparse==1.2.1 attrs==15.2.0 autobahn==0.13 .1 cbor==1.0.0 cffi==1.5.2 click==6.6 crossbar==0.13.0 cryptography==1.3.1 enum34==1.1.2 idna==2.1 ipaddress==1.0.16 lmdb==0.89 misune==0.7.2 msgpack-python==0.4.7 netaddr==0.7.18 psutil==4.1.0 pyOpenSSL==16.0.0 pyasn1==0.1.9 pyasn1-modules==0.0.8 pycparser==2.14 pyinotify==0.9.6 requests==2.9.1 sdnotify==0.3.0 service-identity==16.0.0 setproctitle==1.1.9 shutilwhich==1.1.0 六==1.10.0 treq==15.1.0 txaio==2.3.1 ujson==1.35 wsaccel==0.6.2 wsgiref==0.1.2 zope.interface==4.1.3
使用以下命令生成 hello 模板:crossbar init --template hello:python --appdir hello
- 试图运行横杆
cd hello; crossbar start
得到错误:
请帮我修复它。我知道 parseWsUrl 在 autobahn.websocket.protocol 中不存在,但这个错误来自交叉库。因此,我该如何解决?或解决方法?
crossbar - Crossbar Thruway 工人撞车
我有一个带有 PHP Thruway 工作人员的 Crossbar.io 服务器。最近,我开始收到以下错误。现在大约每天发生一次:
有谁知道防止这种情况发生?
如果在这种情况下失败,我如何自动重新启动工作人员?
python-3.x - 如何获取 Crossbar.io 主机名?
我使用 crossbar.io 编写聊天。我们有几个聊天节点。我需要编写有关每个节点的统计信息,这就是为什么我需要获取运行特定节点的主机名的原因。
是否可以从组件实例中获取主机名?
我使用最新版本的横杆/高速公路和 python 3.4。
如果我使用本地环境,期望得到 - 127.0.0.1。
websocket - 带有中间证书和交叉签名证书的 Crossbar SSL/TLS 配置
使用最新版本的Crossbar(0.13,从apt-get
Ubuntu 14.04 安装)我无法使用 SSL 和中间证书建立连接。
ca_certificates
如果我在密钥中没有属性的情况下设置服务器,tls
则服务器运行良好,并且可以通过wss
协议使用 Google Chrome 建立连接。但是尝试使用thruway建立连接失败并出现以下错误:
无法连接:无法完成 SSL/TLS 握手:stream_socket_enable_crypto():SSL 操作失败,代码为 1。OpenSSL 错误消息:错误:14094410:SSL 例程:ssl3_read_bytes:sslv3 警报握手失败
与Thruway团队交谈似乎是证书问题 - 在我们的实时站点上,我们使用来自 Gandi 的中间和交叉签名证书,这是某些浏览器所需的,因此是一些 open-ssl 实现所必需的。
似乎虽然浏览器很乐意只使用密钥和证书建立 TLS 连接,但 Thruway 需要一个链。然而,以下使用 Gandi 提供的两个证书的配置不适用于Chrome或Thruway。Chrome 显示错误:
失败:WebSocket 打开握手被取消
使用.crossbar/config.json
下面的文件时。那么,这是我的配置、我的证书还是 Open-SSL 堆栈的其他部分的问题?
(下面的文件已被更改,以删除任何潜在的敏感信息,因此可能看起来由于其他原因无法正常工作。如果连接正常,则底层身份验证和其他组件工作正常,因此请保留有关 TLS 实施的答案/评论。注释不是有效的 JSON,但包含在内,因此读者可以看到正在使用的证书文件)
还有其他问题可以解决与此类似的问题@
python - WAMP 与 Django App 使用 Python 2.7 和 3.4 - 可能吗?
问题的本质是:考虑到代码应该运行并且只有在进行远程过程调用时才被中断,是否可以在支持 Python 2.7 和 3.4 的 Django 应用程序中使用 WAMP 通知?(也就是说,它不仅仅是在等待一个 RPC 的到来)
我们想如何使用 WAMP:该程序有一个 Javascript 前端和一个 Python/Django 后端。我们要做的一件事是在单击前端的按钮时在后端启动一个函数。不过,这有时会花费太多时间,因此我们允许用户通过单击另一个按钮来取消它。这会进行远程过程调用,这将导致函数提前停止(它会更改在函数中检查的变量)。将来也可能对 RPC 或 Pub/Sub 有其他需求。
我们使用autobahn_sync模块让它与 Python 2.7 一起工作,但它使用了 Twisted,它还没有完全移植到 Python 3.x。这就是为什么我们需要另一种方法来让 WAMP 通知在 3.x 上工作。
支持 asyncio 并且从crossbar 文档看来它可以用来代替 Twisted,但是如果不阻塞应该并行运行的代码(代码添加在下面),我们就无法让它工作。而且似乎没有类似 autobahn_sync 使用 asyncio 而不是 Twisted 的东西。
我们是 WAMP 的新手,可能缺少一些东西。
这是我们使用 asyncio 测试的代码(使用 Python 3.4)。它阻止了其余的功能:
我们如何注册主题并从 runner.run 调用返回?在 Python 2.7 测试中,使用 autobahn_sync 我们可以简单地执行以下操作: