flu*_*lux 7 python flask socket.io flask-sqlalchemy angularjs
我是一个新手开发一个简单的多用户游戏(想想Minesweeper),使用Flask作为API后端,使用AngularJS作为前端.我已经按照教程来构建Angular/Flask应用程序,并且我使用Flask-Restless编写了一个RESTful API.
现在,我想在数据库中更改游戏数据时将事件推送给所有客户端(因为它是通过POST到一个Restless端点).我正在寻找使用SqlAlchemy event.listen API来调用Flask-SocketIO emit函数来向客户端广播数据.这是完成我正在尝试做的事情的合适方法吗?这种方法有缺点吗?
如果所有计算都在同一进程中完成,@CESCO 的回复效果很好。您还可以使用此语法(请参阅此处的完整源代码):
@sa.models_committed.connect_via(app)
def on_models_committed(sender, changes):
for obj, change in changes:
print 'SQLALCHEMY - %s %s' % (change, obj)
Run Code Online (Sandbox Code Playgroud)
如果您有兴趣订阅数据库的所有更新,请继续阅读...
但是,如果您的数据库是从另一个进程更新的,那么这将不起作用。
models_commit仅在提交来自的同一进程中工作(这不是数据库级别的通知,它是提交到数据库后的sqlalchemy)
https://github.com/mitsuhiko/flask-sqlalchemy/issues/369#issuecomment-170272020
我编写了一个小演示应用程序,展示了如何使用 Redis、ZeroMQ 或 socketIO_client 与服务器进行实时更新通信。对于其他尝试处理外部数据库访问的人来说可能会有所帮助。
另外,您可以考虑订阅 postgres 事件: https://blog.andyet.com/2015/04/06/postgres-pubsub-with-json/
| 归档时间: |
|
| 查看次数: |
1020 次 |
| 最近记录: |