从mysql数据库发送数据到客户端页面而不刷新页面(超时)

时间:2014-12-02 02:03:06

标签: javascript php mysql

我为选美比赛创建了一个制表系统,用于显示投影仪上的评分。我使用Codeigniter创建了一个演示文稿页面。

该演示文稿页面中的HTML纯粹是用Javascript编写的。页面每秒刷新一次,以获得评委发送的实时数据。

关于这种逻辑的不太酷的事情是,当页面写入大量数据时,页面每秒都会闪烁。因此,页面的刷新是显而易见的,有点令人不安。

这是我正在处理的代码的片段。

$(document).ready(function() {
                getJudgesScore();

                setInterval(function(){
                    if (getNumFinalists() == 0)
                        getJudgesScore();
                    else {
                        window.open ('presentationFinalists','_self',false)
                    }

                    },1000);
            });

您可以想象每次执行此代码时发送和接收的数据量。

总而言之,我想要完成的不是客户端每秒都要求数据,而是每次将新数据保存到数据库时服务器都会启动连接。感谢您抽出宝贵时间阅读我的疑虑。

Presentation page

2 个答案:

答案 0 :(得分:0)

这可以帮助您从mysql服务器获取必要的数据并发送到客户端页面。 定时器jquery在间隔时间后运行。

        <script src="../JS/Timer/jquery.timer.js"></script>
        var timer = $u.timer(function() {
          getJudgesScore();
        });
        timer.set({time: 1000, autostart: true});

也请参考此链接       https://code.google.com/p/jquery-timer/source/browse/trunk/jquery.timer.js?r=12

答案 1 :(得分:0)

你所尝试的是一个棘手的 - 但并非不可能 - 的命题。

@Chelsea是对的 - 服务器无法真正启动与客户端的连接 - 但有几种技术可以模拟该功能,使用为未来事件保持打开的客户端连接。

想到的是EventSource,Web Sockets和长轮询......所有这些都有各种优点和缺点。没有一个“正确”的答案,但谷歌(和Stack Overflow)是你的朋友。

当然,通过上面的“服务器”,我指的是Web服务器,而不是数据库。 Web服务器在将数据发布到数据库时需要通知相应的客户端数据更改。

要从MySQL服务器本身(传送到Web服务器)获得事件的实时通知也是可能的,但需要访问和解码复制事件流,这是一个复杂的命题。然后,发现的事件将需要Web服务器通过上述机制之一通过已建立的连接通知侦听客户端。

您还可以继续从浏览器轮询服务器,但只使用通过ajax交换足够的数据来更新您需要的内容。如果您在刷新请求中包含某种指示符,例如您在先前更新中收到的时间戳,或者某种单调的全局版本ID(例如MySQL UUID_SHORT()函数生成),您可以发送一个非常轻量级的{ {1}}对客户端的响应,表明浏览器不需要更新任何内容。