【问题标题】:Autobahn Application Runner is not running AppsAutobahn Application Runner 未运行应用程序
【发布时间】:2015-01-03 06:24:21
【问题描述】:

我对 Autobahn 和 WAMP(Web 应用消息传递协议)还很陌生。

我只是基于http://autobahn.ws/python/wamp/programming.htmlhttps://github.com/crossbario/crossbarexamples/blob/master/votes/python/votes.py 创建一个简单的应用程序组件

下面是我的服务器端 Python

from autobahn.asyncio.wamp import (
    ApplicationSession,
    ApplicationRunner
)
from autobahn import wamp

from asyncio import coroutine


class MyComponent(ApplicationSession):
    @wamp.register("com.myapp.add2")
    def add2(self, x, y):
        print("added 2")
        return x + y

    @wamp.register("com.myapp.add3")
    def add3(self, x, y, z):
        print("added 3")
        return x + y + z

    @coroutine
    def onJoin(self, details):
        res = yield from self.register(self)
        print("{} procedures registered.".format(len(res)))

if __name__ == '__main__':
    runner = ApplicationRunner(url="ws://localhost:8080/ws", realm="realm1")
    runner.run(MyComponent)

和客户端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
<script>AUTOBAHN_DEBUG = false;</script>
<script src="http://autobahn.s3.amazonaws.com/autobahnjs/latest/autobahn.min.jgz"></script>

<script>
    var connection = new autobahn.Connection({
        url: "ws://localhost:8080/ws",
        realm: "realm1"
    });

    connection.onopen = function (session, details) {
        session.call("com.myapp.add2", [2,3]).then(session.log);
        session.call("com.myapp.add3", [2,3,4]).then(session.log);
    };

    connection.onclose = function (reason, details) {
        console.log("Connection lost: " + reason);
    };

    connection.open();
</script>
</body>
</html>

错误

看起来这类似于https://github.com/hwmrocker/hextest/issues/2,但我无法理解。我什至找不到有效的样本。这个 (https://github.com/tavendo/AutobahnPython/tree/master/examples/asyncio/wamp/wamplet/wamplet1) 类似,但也有同样的问题。

令人惊讶的是,当我在同一个端口上运行外部 Crossbar 示例并运行上述示例时,它就像魔术一样工作,我可以在控制台上看到结果。

我找到了这个 (https://github.com/tavendo/AutobahnPython/blob/master/examples/asyncio/wamp/basic/server.py),但它看起来很复杂。

请帮帮我。

谢谢你的高级。

【问题讨论】:

  • 请注意,许多示例/文档当前需要更新:AutobahnPython 中包含的“基本 WAMP 路由器”(例如选项 standalone == TrueApplicationRunner)最近已移至 Crossbar.io :groups.google.com/d/msg/autobahnws/bCj7O2G2sxA/6-pioJZ_S_MJ。 AutobahnPython 不仅仅是 WAMP client 库 - 与所有其他 Autobahn 库一样。因此,您需要一个外部 WAMP 路由器。

标签: python autobahn python-asyncio crossbar


【解决方案1】:

您的代码无需修改即可为我工作:

您的应用由 2 个 WAMP 应用程序组件组成:浏览器端(使用 AutobahnJS)和服务器端(使用 AutobahnPython/Python3/asyncio)。

要让这两个组件相互通信,两个组件都需要连接到 WAMP 路由器。我用Crossbar.io

请注意,您的 Python 组件在逻辑上是一个服务器端组件,但在技术上它不是一个服务器:它不会打开一个监听端口或什么,但它连接到 WAMP 路由器。

【讨论】:

  • 非常感谢,这正是我最终所做的。我刚刚创建了一个空的交叉开关应用程序并在运行上述组件之前运行了路由器。
  • 在几个例子中,我注意到通过一个集中的 JSON 文件注册组件,但是,你不认为分散它并为每个组件都有一个独立的配置是一个好主意避免单点故障问题。
  • 我在上面所做的是单独启动 Python 应用程序组件。但是 Crossbar.io 有 option 不仅可以作为路由器运行,还可以在工作进程中启动和监视应用程序组件(以及将来在 OS 容器中 - 想想 Docker)。这里的空间不足以讨论这打开的所有方面和可能性以及它们的优点/缺点......
  • 感谢 oberstet。我非常感谢出色的工具和 Docker。我迫切希望使用下一个版本的横杆。我对网络编程很陌生,但如果可以的话,我希望我能帮助复习文档和资料。
  • @Eddie 如果您想帮助文档和/或测试与文档相关的东西,绝对欢迎!所有文档均从 Wiki github.com/crossbario/crossbar/wiki 生成,您可以立即对其进行编辑。因为任何人都可以编辑,所以请注意一点,特别是如果对事情有疑问 - 只要您至少正在学习这些事情。但是,如果您足够确定编辑是正确的,那就继续吧!我们希望保持入口栏尽可能低的贡献..
猜你喜欢
  • 2016-10-01
  • 2015-03-06
  • 2016-09-16
  • 1970-01-01
  • 2016-05-16
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多