什么是同时在不同页面上以php的形式播放音频播放列表的最佳方式

时间:2012-12-06 15:29:14

标签: php jquery mysql html5 flash

我正在开发一个项目,我需要在服务器上创建txt文件时宣布一个公告,我需要通过音频通知通知所有用户,音频应该在任何客户端浏览器上一次播放目前在页面上。播放公告需要同步到最高准确度。

公告由多个音频文件(播放列表)组成。

在所有活动客户端上播放通知后,将删除txt文件。并且服务器将等待/寻找另一个txt文件。

例如: client1 - 服务器时间:19:22:01,收到公告并播放音频 Client2 - 服务器时间:19:22:01,收到公告并播放音频

任何建议?关于如何立即对所有客户,任何技术完成公告? mysql数据库或 Flash,Applets,HTML5音频,JQuery等。

谢谢..

1 个答案:

答案 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会得到结果。