我正在开发一个项目,我需要在服务器上创建txt文件时宣布一个公告,我需要通过音频通知通知所有用户,音频应该在任何客户端浏览器上一次播放目前在页面上。播放公告需要同步到最高准确度。
公告由多个音频文件(播放列表)组成。
在所有活动客户端上播放通知后,将删除txt文件。并且服务器将等待/寻找另一个txt文件。
例如: client1 - 服务器时间:19:22:01,收到公告并播放音频 Client2 - 服务器时间:19:22:01,收到公告并播放音频
任何建议?关于如何立即对所有客户,任何技术完成公告? mysql数据库或 Flash,Applets,HTML5音频,JQuery等。
谢谢..
答案 0 :(得分:0)
我用简单的PHP,Ajax和MySQL编写了一个长轮询技术:
PHP代码如下:
timeout = 600;
while (timeout > 0) {
$res = db_query("QUERY");
$return_value = create_value_from_result($res);
// see if the result changed
$db_hash = md5($return_value);
if ($_SESSION['hash'] == $db_hash) {
// the result didn't change -- sleep and poll again
// usleep take microseconds, 100000 is 100 millisecond
// this is the default database polling interval
usleep(100000);
$timeout--;
} else {
// the result changed -- reply the result and set the session hash
$timeout = 0;
$_SESSION['hash'] = $db_hash;
}
}
return json_encode($return_value);
Javascript是简单的Ajax(dojo就是这种情况):
function longpoll() {
dojo.xhrPost({
url: 'longpolling.php',
load: function (data, ioArgs) {
data = dojo.fromJson(data);
do_magic(data);
// use settimeout to avoid stack overflows
// we could also use a while(1) loop,
// but it might give browser errors such as 'script is
// running too long' (not confirmed)
setTimeout(longpoll, 0);
}
});
}
您需要60秒的超时时间以确保浏览器在Ajax调用时没有超时。
这样,只要QUERY的结果发生更改(插入记录,对记录进行更新),PHP调用就会返回,Ajax会得到结果。