使用Javascript(真正)实时更新数据

时间:2015-04-21 20:04:22

标签: javascript ajax angularjs

我想为需要全屏运行的网页艺术应用程序构建一个控制面板,因此所有控制颜色和速度值等内容的面板都必须位于不同的窗口。

我的想法是拥有一个存储所有这些值的数据库,当我在控制面板窗口中进行更改时,应用程序窗口中的相应变量也会更新。所以,它基本上是一个实时更新,我可以用AJAX设置一个间隔来检查变化但是我的问题是:我不能等待30秒左右更新发生,我想每1秒AJAX请求是不可能的。

最后一个问题:有没有办法创建一种数据库更改的监听器,并且只在我在控制面板中更改某个值后立即在主应用程序中触发更新事件? Angular或其他框架是否具备此功能?

(很抱歉有很长的解释,但我希望通过提供上下文[:]

来更清楚我的问题

4 个答案:

答案 0 :(得分:1)

支持Web套接字的应用程序将具有此优势。这在后端带来了更多的复杂性,但有利于使您的应用程序尽可能接近实时,可以合理预期。

Mozilla开发网络有一些很好的documentation on websockets

在前端,WebSocket对象应该适用于大多数现代浏览器。

我不确定你的后端是什么写的,但是Socket.IO代表Node.js而Tornado代表Python会使你的应用程序支持web-socket

答案 1 :(得分:0)

如果一个窗口通过 JavaScript 打开其他窗口,您可以保留对已打开窗口的引用,并使用otherWindow.postMessage传递消息

“父”窗口看起来像

// set up to receive messages
window.addEventListener('message', function (e) {
    if (e.origin !== 'http://my.url')
        return; // ignore unknown source
    console.log(e.message);
});

// set up to send messages
var otherWindow = window.open('/foo', '_blank');
otherWindow.postMessage('hello world', 'http://my.url');

“儿童”窗口看起来很相似

// same setup to recieve
// ...

// set up to send
var otherWindow = window.opener;
// ... same as before

答案 2 :(得分:0)

对于实时我建议使用像socket.io这样的库或使用像firebase这样的数据库。

对于全屏我建议使用像angular-screenfull

这样的库

答案 3 :(得分:0)

我使用https://pushjs.io/,遇到了完全相同的问题,这是解决您问题的非常简单的方法。它能够发送和侦听事件,而不会受到任何数据库干扰。