可以使用AngularJS + Flask堆栈推送通知吗?

时间:2013-05-20 17:17:53

标签: python angularjs push-notification flask

我的网站有一个Python / Flask后端和一个Angular前端。在后端有一个进程偶尔检查SQS的消息,我希望它向客户端发送通知,然后客户端可以更新Angular控制器。我现有技术的最佳方法是什么?

2 个答案:

答案 0 :(得分:7)

为了能够推送到客户端,您必须以某种方式实现Web套接字支持。如果你想把它保存在python / flask中,那么有关于如何使用gevent执行此操作的教程:

http://www.socketubs.org/2012/10/28/Websocket_with_flask_and_gevent.html

在那篇文章中,Geoffrey还提到了一个用于python / gevent的SocketIO兼容库,它可以让你利用SocketIO客户端JS库,称为“gevent-socketio”。

这可能会减少您在跨浏览器兼容性方面需要做多少工作,因为SocketIO已经做了很多工作。

这是一个非常好的教程,介绍如何在AngularJS中使用SocketIO,以便在SocketIO发生事件时通知AngularJS模型:

http://www.html5rocks.com/en/tutorials/frameworks/angular-websockets/

如果您不想托管Web套接字后端,可以查看PubNub或Pusher等托管服务,然后将它们作为服务集成到AngularJS中。您可以通过Python应用程序与这些服务进行通信(当SQS通知发生时),他们将为您通知所有连接的客户端。

答案 1 :(得分:3)

我知道这有点晚了,但我完全按照你的要求做了(尽管没有Angular)。

我最后有一个单独的进程运行一个名为Autobahn的websocket服务器,该服务器监听一个redis pub / sub socket,代码为here on github

这使您可以从几乎任何可以访问redis的内容向您的客户端发送推送通知。

因此,当我想向所有连接的客户端发布消息时,我只需使用redis:

r = redis.Redis()
r.publish('broadcasts', "SOME MESSAGE")

到目前为止,这已经相当不错了。我目前无法做的是向特定客户发送推送通知。但是,如果您有一个身份验证系统或某些东西来识别特定用户,您可以将其绑定到打开的websockets,然后能够将消息直接发送到特定客户端: - )

你当然可以使用任何websocket服务器或客户端(如socket.io或sock.js),但这对我来说很有用: - )