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

用php同时在不同页面上播放音频播放列表的最佳方式是什么,php,jquery,mysql,html,flash,Php,Jquery,Mysql,Html,Flash,我正在做一个项目,在这个项目中,我需要在服务器上创建一个txt文件时发布一个公告,我需要通过一个音频公告通知所有用户,音频应该立即在当前页面上的任何客户端浏览器上播放。公告的播放需要同步到最高精度 公告由多个音频文件(播放列表)组成 在所有活动客户端上播放公告后,txt文件将被删除。服务器将等待/查找另一个txt文件 例如: 客户端1-服务器时间:19:22:01,收到通知并播放音频 客户端2-服务器时间:19:22:01,收到通知并播放音频 有什么建议吗?关于如何在所有客户机上同时完成公告,有

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

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

在所有活动客户端上播放公告后,txt文件将被删除。服务器将等待/查找另一个txt文件

例如: 客户端1-服务器时间:19:22:01,收到通知并播放音频 客户端2-服务器时间:19:22:01,收到通知并播放音频

有什么建议吗?关于如何在所有客户机上同时完成公告,有什么技巧吗?mysql数据库或 Flash、小程序、HTML5音频、JQuery等


谢谢..

我用简单的PHP编写了一个长轮询器技术,Ajax en 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就是这种情况):

您需要60秒的超时时间来确保浏览器在Ajax调用时不会超时


这样,只要查询结果发生变化(插入记录,对记录进行更新),PHP调用就会返回,Ajax就会得到结果。

您可以使用长轮询器。它基本上是一个简单的轮询器,在有数据之前不会返回。让长轮询器(通常是PHP)中的代码轮询数据库中的事件。在这种情况下,您可以在数据库上获得毫秒级的精确轮询,而无需创建大量数据传输—所有这些都是现成的经验证的技术。目前,我正在使用类似的方法,但仍然有将近1.5秒的差异。我想减少,找出1.5秒的来源。我们在DB上创建了长轮询器,超时时间为1分钟,轮询器的响应时间为100毫秒。(还有:你真的需要亚秒精度吗?也许你使用了错误的工具…)这些工具是html5、php、mysql和轮询技术。是的,亚秒精度对我来说很重要。。您使用/推荐什么工具。在我们的例子中,我们使用PHP/MySQL和基本Ajax。MySQL轮询器使用PHP的
usleep
在数据库轮询之间休眠100毫秒。我把密码放在答案里了。只有一个问题。。60秒超时可能会产生问题。如果两个客户端正在运行呢?两者都将显示更新数据的精度。如果两个客户端都在运行,它们都有自己的PHP调用和超时。同步数据将几乎在瞬间提供给他们。我们已将此技术用于多个客户端和多个数据点。超时仅用于确保浏览器不会出现“服务器响应时间过长”错误。试试看,你会发现它是有效的。
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);
        }
    });
}