2

我正在尝试创建一个简单的脚本,用于使用 jQuery 和 PHP 从 mysql 获取通知(我的代码如下)。目前 jquery 每秒获取 loadmore.php 并更新包含它的 div。我只是想知道如果网站流量很大,这是否会给服务器带来太大的压力?

源代码:index.php -

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/
libs/jquery/1.3.0/jquery.min.js"></script>
<script type="text/javascript">
var auto_refresh = setInterval(
function ()
{
$('#notifications').load('loadmore.php');
}, 1000); // refresh every 10000 milliseconds
</script>
<body>
<div id="notifications"> </div>
</body>


</html>

loadmore.php -

<?php
include('config.php');

?>

<?php
$sql=mysql_query("select * from updates ORDER BY item_id DESC LIMIT 9");
while($row=mysql_fetch_array($sql))
{
$msg_id=$row['item_id'];
$message=$row['item_content'];
?>
<?php echo $message; ?><br />
<?php } ?>
4

5 回答 5

2

如果每个打开页面的用户每秒都在请求 loadmore.php,那么您将很快使服务器崩溃(假设您有多个用户)。可以这样想:如果普通用户每两分钟点击一次链接,服务器负载就会增加 60-120 倍。

您最好使用XMLHttpRequestfrom AJAX 加载动态内容。无论您决定使用何种技术,您都不需要每秒拨打电话来获得响应式更新。

于 2011-04-14T03:47:43.103 回答
2

如果您决定这样做,这里有一些想法可以减少服务器密集度。

  • 只返回新消息。大多数情况下,您的更新 ping 将是一个 0 字节的响应,因此会大大减少流量。使用 jQuery 将 UI 限制为 9 条消息并附加新消息。
  • 缓存数据库结果。看起来更新消息对每个用户都是相同的,因此不要为每个更新请求进行数据库调用,而是保存结果并且每秒只允许 1 个数据库查询。
于 2011-04-14T04:32:45.457 回答
1

如果您必须每秒都执行此操作(即使像其他人一样,我建议您不要频繁调用服务器),请查看 Memcached 或 APC 之类的东西,以使请求本质上变得微不足道。不要在每个请求上都访问数据库,如果可能的话,直接从缓存中提供它。

此外,请查看 Long Polling 和 Node.JS,这将允许构建更实时的东西。

于 2011-04-14T04:23:21.520 回答
0

想象一下——

每个用户每秒一次点击 1000 个活跃用户等于 1000 次点击/秒 + 所有其他流量

我会说这会杀死大多数服务器。如果您计划这样做,您将需要一个强大的解决方案来处理这种流量。

于 2011-04-14T03:48:08.843 回答
0

阅读答案......然后我想到了将流量处理到 facebook 需要多少。或任何其他有这种出席率的网站。当然,您必须妥善处理流量,但这本身根本不是问题。这是正常的,这完全取决于两个基本因素:1)您实际计划服务的用户数量和 2)您的服务器有多强大

于 2012-06-28T13:18:23.453 回答