Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何防止服务器过载?_Php_Mysql - Fatal编程技术网

Php 如何防止服务器过载?

Php 如何防止服务器过载?,php,mysql,Php,Mysql,我用php做了一个while循环: <?php include_once("connect.php"); $search=mysql_query("SELECT * from chat ORDER BY id DESC LIMIT 1"); $row=mysql_fetch_assoc($search); $type=$row['type']; $id=$row['id']; while($type!='n'){ usleep(10000); $search=mysql_quer

我用php做了一个while循环:

<?php
include_once("connect.php");

$search=mysql_query("SELECT * from chat ORDER BY id DESC LIMIT 1");
$row=mysql_fetch_assoc($search);
$type=$row['type'];
$id=$row['id'];
while($type!='n'){
  usleep(10000);
  $search=mysql_query("SELECT * from chat ORDER BY id DESC LIMIT 1");
  $row=mysql_fetch_assoc($search);
  $type=$row['type'];
}

$run=mysql_query("UPDATE chat SET type='o' WHERE id=$id");

mysql_close($conn);
echo $row['message'] . "<br/>";

?>

while
循环从不终止,因为您总是获取最后一条记录,但不对其进行任何更改。。因此,您只需进入循环一次,并始终检查相同的记录,而不必离开循环

您应该尝试将无限循环转换为按一定间隔运行的计划事件。。使用cron作业



更新

usleep(10000);
set_time_limit(11000);
如果您正在等待其他操作来更改最后一条记录的类型,以便此代码捕获它并退出循环,则您的算法不适合客户端/服务器应用程序


您应该在其他某个点预测记录准备更改的时间,并在该时间调用代码,而不是进入无限循环,直到某个外部事件使循环变为非无限循环

更新

usleep(10000);
set_time_limit(11000);
第一个答案

你想用这段代码实现什么?超时消息来自脚本
usleep(10000)

您的代码无法检测到即时用户输入,PHP代码将在用户与服务器交互之间运行

如果要创建聊天工具,请执行以下操作:

  • 每当用户点击
    Enter
    Send
    时,通过AJAX发送消息
  • 存储接收到的消息以及接收到的消息的时间戳
  • 选择一个
    更新时间
    ,例如3秒
  • 通过AJAX更新聊天,每次
    更新时间
  • 返回
    updatetime
    旧的或更新的消息

它确实离开了循环,因为更新完成了它的工作,我只是问我是否可以为服务器做些什么。更新直到循环终止后才“通过”——正如@Gaby所说,这永远不会。伙计,是的!行被更新了你没有得到什么?它起作用了@Petre,如果$type='n'。。否则,它将进入循环,永远不会离开。。如果没有,请解释算法,并确保您在这里发布的代码与您运行的代码相同。。。检查是否匹配
{}
。。除非您希望从另一个页面发生另一个事件,该事件将使此代码离开循环。它第一次检查并获取$type的值,如果没有新条目,它将是“o | from old,所以”虽然“$type不等于”n”,它检查服务器并给$type新值,直到它为“n”为止“然后它更新表并回显条目。它始终运行。成功后,当信息被带回时,我再次呼叫它,以便它重新开始,响应非常快。我只是问我是否可以为服务器做些什么。