使用ajax和php改进轮询

使用ajax和php改进轮询,php,javascript,ajax,Php,Javascript,Ajax,这是工作,但我认为它可能是资源饥饿,有任何方法来改善它吗 将回调添加到dbtest.php: extract($_REQUEST); $query = "INSERT INTO calls ( `timestamp`, `fromnum`, `tonum` )

这是工作,但我认为它可能是资源饥饿,有任何方法来改善它吗

将回调添加到dbtest.php:

extract($_REQUEST); 
$query = "INSERT INTO calls (
                        `timestamp`,
                        `fromnum`,
                        `tonum`
                        )
                        VALUES (
                        NOW(),
                        '".mysql_real_escape_string( $from )."',
                        '".mysql_real_escape_string( $to )."'
                        )";
                        $sql = mysql_query($query) or die(mysql_error());
获取calls表queue.php中的最后一个条目:

$result = mysql_query("SELECT fromnum FROM calls WHERE 
tonum = '$tonum' ORDER BY timestamp DESC LIMIT 1");

    while($row = mysql_fetch_array($result))
      {
      $fromnum = $row['fromnum'];
      }
    // Get caller info from contacts db
    $result = mysql_query("SELECT * FROM contacts WHERE phone = '$fromnum'");

    while($row = mysql_fetch_array($result))
      {
      echo '<table width="100%" border="0">
      <tr>
        <td width="33%">Account Number</td>
        <td width="33%">Contact Name</td>
        <td width="33%">Phone Number</td>
      </tr>
      <tr>
        <td>'.$row['number'].'</td>
        <td>'.$row['name'].'</td>
        <td>'.$row['phone'].'</td>
      </tr>
    </table>';
      }
从queue.phplisten.php调用信息:

var auto_refresh = setInterval(
function ()
{
$('#response').load('queue.php').fadeIn("slow");
}, 1000); // refresh every 10000 milliseconds
</script>
<div id="response"></div>
感谢您的关注,欢迎任何帮助

干杯, B.

不要提取$\u请求;。这基本上重新创建了register_globals,旧PHP版本的每一个安全漏洞/缺点/愚蠢都恢复到了令人眼花缭乱的辉煌。它允许用户使用任意值/变量来处理PHP名称空间

如果这并没有吓倒你,那就离开电脑跑回家。

不要提取$\u请求;。这基本上重新创建了register_globals,旧PHP版本的每一个安全漏洞/缺点/愚蠢都恢复到了令人眼花缭乱的辉煌。它允许用户使用任意值/变量来处理PHP名称空间

如果这没有吓倒你,那就离开电脑回家。

高效的交通工具 您的代码不会每10秒刷新一次,但每秒钟1000毫秒等于1秒。那么快的投票是不好的。作为一种高效的交通工具,您应该等待新的信息。在每个浏览器中最简单的传输方式是长轮询,但在PHP/Apache中并不能很好地扩展。幸运的是,您可以使用免费计划,该计划使用称为WebSockets的高效传输,这是实时通信的未来。比如说,当你长大后,你应该喜欢上大学

内存数据库 我还建议您查看内存中的数据库,比如twitter/facebook中流行的数据库,将您的查询完全存储在内存中,而不是通过Sql从光盘中获取,因为Sql比内存慢。我真的很喜欢Redis,因为它比Memcached速度更快,功能更完善。你甚至很幸运,你提供了免费使用Redis的计划。这样你就不需要编译redis了,这比编译memcached容易多了

字节码缓存 当你可以安装你真的应该,因为这将使你的网站更快,甚至不写一行代码

SQL注入。 我建议您研究如何以正确的方式防止SQL注入。此外,PDO非常适合测试您的代码,因为您可以使用SQLite在内存模式下使用。

高效传输 您的代码不会每10秒刷新一次,但每秒钟1000毫秒等于1秒。那么快的投票是不好的。作为一种高效的交通工具,您应该等待新的信息。在每个浏览器中最简单的传输方式是长轮询,但在PHP/Apache中并不能很好地扩展。幸运的是,您可以使用免费计划,该计划使用称为WebSockets的高效传输,这是实时通信的未来。比如说,当你长大后,你应该喜欢上大学

内存数据库 我还建议您查看内存中的数据库,比如twitter/facebook中流行的数据库,将您的查询完全存储在内存中,而不是通过Sql从光盘中获取,因为Sql比内存慢。我真的很喜欢Redis,因为它比Memcached速度更快,功能更完善。你甚至很幸运,你提供了免费使用Redis的计划。这样你就不需要编译redis了,这比编译memcached容易多了

字节码缓存 当你可以安装你真的应该,因为这将使你的网站更快,甚至不写一行代码

SQL注入。
我建议您研究如何以正确的方式防止SQL注入。此外,PDO非常适合测试您的代码,因为您可以使用SQLite在内存模式下使用。

对于您的sql,我会使用参数化查询。您的转义字符串很好,但没有参数化查询那么棒。我会读这篇文章,学习PDO。它使您的sql更容易使用,我真的会使用参数化查询。您的转义字符串很好,但没有参数化查询那么棒。我会读这篇文章,学习PDO。它使生活变得更加轻松。不要偷懒,自己将各个字段提取到您选择的变量名中$x=$_GET['x'];这类事情。这很乏味,但不太可能让远程用户破坏您的脚本的数据空间。感谢您的回答-Wild:foreach$_postas$key=>$value{$$key=addslashestrim$value;}这样做吗???不。addslashes是垃圾,早就该从PHP中删除了。而且您的foreach循环仍然会使用任意用户提供的垃圾来污染脚本的变量空间。就像我说的,不要懒惰。考虑一下如果有人提交了一个表单字段名为“SyServer”或“POST”,会发生什么,你会用用户提供的数据来破坏核心PHP变量。在你问之前,不,不要有一个好的/坏的变量名的白名单/黑名单来过滤。白名单/黑名单是一个愚蠢的追逐尾巴的游戏,而你
我永远也跟不上了。简单地说:$from=trim$_POST['from']$to=修剪$_POST['to'];不要偷懒,自己将各个字段提取到您选择的变量名中$x=$_GET['x'];这类事情。这很乏味,但不太可能让远程用户破坏您的脚本的数据空间。感谢您的回答-Wild:foreach$_postas$key=>$value{$$key=addslashestrim$value;}这样做吗???不。addslashes是垃圾,早就该从PHP中删除了。而且您的foreach循环仍然会使用任意用户提供的垃圾来污染脚本的变量空间。就像我说的,不要懒惰。考虑一下如果有人提交了一个表单字段名为“SyServer”或“POST”,会发生什么,你会用用户提供的数据来破坏核心PHP变量。在你问之前,不,不要有一个好的/坏的变量名的白名单/黑名单来过滤。白名单/黑名单是一个追逐尾巴的傻瓜游戏,你永远也跟不上$to=修剪$_POST['to'];