0

我正在尝试将 RESTful 响应程序集成到 Crossbar 应用程序中,最合适的似乎是WSGI service。理想情况下,该服务应该是发布/订阅基础设施其余部分的一部分,一方面能够接收WAMP事件,另一方面能够响应 HTTP 请求。

困难在于运行允许异步 Web 套接字事件并另外提供 WSGI 兼容组件的事件循环。在我看来,Pulsar应该能够做到这一点,但我无法弄清楚如何设置它,没有可用的示例准确地展示了这个用例。

value = None

class Foo(ApplicationSession):
    def onJoin(self, details):
        yield self.subscribe(self.bar, 'bar')

    def bar(self, data):
        value = data


app = Flask(__name__)

@app.route('/')
def baz():
    return value


if __name__ == '__main__':
    runner = ApplicationRunner('ws://127.0.0.1:8080', 'test')
    runner.run(Foo, start_reactor=False)

    # now what?

上面演示了两个部分,一个 Autobahn WAMP 客户端和一个 Flask WSGI 组件。如何并行运行这两者,允许一个线程通过 HTTP 和 Web 套接字接收事件?我并不特别关心 Python 的版本或底层库(Twisted、asyncio、Pulsar、Flask),我只是想让它以某种方式运行。

4

1 回答 1

1

WSGI 是一个天生的同步 API。我不知道 Pulsar,但如果它能以某种方式神奇地解决这个事实,我会感到惊讶。

Crossbar.io与经典 Web(和同步)堆栈集成的方式是通过 REST 桥。目前,我们今天(2015/02)涵盖了 WAMP“发布者”角色:也就是说,您可以通过执行简单的 HTTP/POST http://crossbar.io/docs/HTTP-Pusher-Service/来发布 WAMP 事件. Crossbar.io 中的这个 REST 桥将在不久的将来扩展到涵盖所有 4 个 WAMP 角色。

如果你退后一步,主要关心的在你的应用程序中创建一个 REST API,它直接与 WAMP 和异步东西集成,我会看看Twisted Klein。Twisted Klein 本质上是在 Flask 之后建模的,但在源代码级别。我们有一篇博文涵盖了这一点:使用 Twisted Klein 混合 Web 和 WAMP 代码

于 2015-02-16T12:37:33.703 回答