我是一个新手,使用Flask作为API后端,并使用AngularJS作为前端来开发一个简单的多用户游戏(想想Minesweeper)。我已按照教程构建Angular/Flask应用程序,并使用Flask-ReSTLess编写了RESTful API。
现在,我想在数据库中更改游戏数据时将事件推送到所有客户端(因为通过POST到ReSTLess端点之一)。我正在使用SqlAlchemy event.listen API调用Flask-SocketIO emit function将数据广播到客户端。这是完成我想做的事情的适当方法吗?这种方法是否有弊端?
最佳答案
如果您的所有计算都在同一过程中完成,则@CESCO的回复效果很好。您还可以使用以下语法(see full source code here):
@sa.models_committed.connect_via(app)
def on_models_committed(sender, changes):
for obj, change in changes:
print 'SQLALCHEMY - %s %s' % (change, obj)
如果您有兴趣订阅,请继续阅读所有对数据库的更新...
但是,如果正在从另一个进程更新数据库,那将不起作用。
我写了a little demo app,它显示了如何使用Redis,ZeroMQ或socketIO_client中的任何一个将实时更新传递到您的服务器。这可能对尝试处理外部数据库访问的任何其他人很有帮助。
另外,您可以考虑订阅postgres事件:
https://blog.andyet.com/2015/04/06/postgres-pubsub-with-json/
关于python - 使用Flask-SQLAlchemy事件API广播到Flask-SocketIO?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24002306/