我们有一个用PHP Laravel构建的web应用程序,它通过JSON API调用暴露了一堆模式对象。我们希望将模式的变化与AngularJS绑定在一起,这样当数据库更新时,AngularJS模型(以及随后的视图)也会实时更新。
就数据库而言,它可以是任何东西,例如mySQL, SQL Server等。我们有两种方法来考虑这个问题:
- mySQL提交在Laravel触发某种事件,然后触发对AngularJS中所有相关/侦听模型/视图的调用。
- 在任何数据被修改(编辑/添加)之前,Laravel向AngularJS触发一个事件。换句话说,在任何成功的DB提交之后,会做另一个"事情"来通知。
第二种方法似乎是显而易见的,干净的方法——因为数据库不涉及堆栈的下层。有更好的方法吗?
这个问题是相关的:如何实现自动视图更新,一旦有变化的数据库在AngularJs?但我不太明白答案中"房间"的概念。
什么(如果有的话)是有效地将数据库提交(推送)绑定到AngularJS视图(渲染更改)的最佳方式?当然,我们希望避免每秒钟都轮询JSON API的更改。在我的一个项目中也有类似的需求。我们使用node.js和sockjs解决了这个问题。流是这样的:
- 有一个node.js + SockJS服务器,所有的客户端都连接到它。
- 当db更新时,laravel通过http (redis也是可能的)向node.js发出命令 Node.js将事件广播到所有感兴趣的客户端(这取决于您的业务逻辑)
- 客户端重新加载所需的数据,或者如果消息足够小,它可以包含在node.js广播中。
希望这对你有帮助。如果不使用其他技术(node.js/web socket/SSE等),就没有干净的方法来做到这一点。这在很大程度上取决于您的客户端将使用的配置。