烧瓶的WAMP RPC和酒吧/酒吧
Flask-WAM的Python项目详细描述
烧瓶水
带有WAMP消息的烧瓶应用程序。
有关wamp是什么的背景,请参见here。
请记住,web应用程序消息传递协议不仅仅是针对web的。所以,如果你想让你的flask应用成为一个更大架构中的wamp组件…那你可以!flask wamp提供两个选项:
- 烧瓶应用程序之间的rrpc或pubsub消息传递,支持后端的微服务体系结构
- 浏览器和Flask应用程序之间的RRPC或PubSub消息传递,支持前端用户的异步、并发调用和实时更新
对于这两种情况,您都需要一个wamp路由器/代理对等机,为此,我建议您使用Crossbar.io。
用例
- 浏览器(我建议wampy.js)和flask应用程序之间的实时更新 LI>升级现有烧瓶微服务的力量
为什么不仅仅是websockets?
websockets当然是一个用于实时客户机-服务器通信的良好实现。为此,您需要一些flask中间件,例如Flask-SocketIO,或flask-sockets。有了wamp,你就没有了。
然后你可能会努力在你的组件之间找到一个成熟的RPC,即使你这样做了,每个组件都需要知道另一个组件的存在,并将主机、端口和路径重新绑定到它上面。使用wamp,前端和后端之间的技术以及后端组件之间的相互通信也保持一致。
您将面临的唯一真正的障碍是使用合理的配置启动和运行crossbar.io,但这方面有很大的支持,docs,演示和早期开发的基本用例很简单。这个路由器/代理对等机是选择wamp的一个重要原因,因为它具有复杂的消息传递模式和高级功能,如authn/z和元事件。对于客户同行来说,wampy.js和flask wamp使这一点非常直接。
另一个你可能想在你的flask消息中考虑flask wamp的原因是在hood下它使用wampy,wampy可以配置为使用eventlet或Gevent,所以如果你的架构已经绑定到其中一个,flask wamp可以使用你选择的异步网络解决方案。
一般来说,wamp有一些您可以直接使用的特性,比如负载平衡和各种身份验证模式。
工作原理
这是一个标准的烧瓶扩展。
在hood下,您有一个wampy客户机实例,该实例具有到crossbar的wamp websocket连接。因此,对于你的flask应用程序的每个实例,你也有一个wampy实例。您必须将flask应用程序包装在flask wamp应用程序中,以实现此目的,并提供路由器主机和领域名称。这应该来自flask配置对象-请参见test_flask_wamp.py以获取示例。
然后,就像使用nameko-wamp一样,您可以声明一个flask端点/视图来完成wamp被调用方或订阅者角色。这并不能阻止您将http请求路由到这些视图-讨价还价!
完成此操作后,任何其他wamp调用者或发布者组件都可以通过wamp协议与之通信,无论这是另一个flask应用程序还是浏览器,并假设它们都连接到同一个领域。声明使用decorators完成。这些“观点”然后在装饰下做什么完全取决于你。
要让flask对等方完成调用者或发布者角色,您需要该wampy实例及其提供的api的句柄。同样,就像nameko-wamp,我们使用依赖注入,这样所有视图都可以通过g对象访问wampy。例如,
fromflaskimportgdefmy_view_function():wampy=g.wampywampy.rpc.some_remote_procedure(*args,**kwargs)wampy.publish(topic="some topic",message="this is fun!")# maybe do other stuff and return something
每一个视图都可以访问wampy,不管它是不是一个装饰视图。wampy已经连接到crossbar,所以not需要像wampy文档建议的那样将它用作上下文管理器。有关wampy的api的更多信息,请参见ReadTheDocs。
运行测试
测试运行器使用wampy提供的crossbar测试夹具。
$ pip install --editable .[dev] $ py.test ./test -v
或者,更简单地说
$ make tests