我为选美比赛创建了一个制表系统,用于显示投影仪上的评分。我使用Codeigniter创建了一个演示文稿页面。
该演示文稿页面中的HTML纯粹是用Javascript编写的。页面每秒刷新一次,以获得评委发送的实时数据。
关于这种逻辑的不太酷的事情是,当页面写入大量数据时,页面每秒都会闪烁。因此,页面的刷新是显而易见的,有点令人不安。
这是我正在处理的代码的片段。
$(document).ready(function() {
getJudgesScore();
setInterval(function(){
if (getNumFinalists() == 0)
getJudgesScore();
else {
window.open ('presentationFinalists','_self',false)
}
},1000);
});
您可以想象每次执行此代码时发送和接收的数据量。
总而言之,我想要完成的不是客户端每秒都要求数据,而是每次将新数据保存到数据库时服务器都会启动连接。感谢您抽出宝贵时间阅读我的疑虑。
答案 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}}对客户端的响应,表明浏览器不需要更新任何内容。