Будет ли запрос php-скрипта каждую секунду оказывать слишком большое давление на сервер? - PullRequest
2 голосов
/ 14 апреля 2011

Я пытаюсь создать простой скрипт для получения уведомлений из mysql с использованием jQuery и PHP (мой код приведен ниже). В настоящий момент 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 } ?>

Ответы [ 5 ]

2 голосов
/ 14 апреля 2011

Если вы решите сделать это, вот пара идей, чтобы сделать его немного менее интенсивным на сервере.

  • Только возвращать новые сообщения.В большинстве случаев ваш пинг обновления будет 0-байтовым ответом, так что трафик будет немного сокращаться.Используйте jQuery, чтобы ограничить интерфейс сообщениями до 9 и добавлять новые сообщения.
  • Кэшируйте результаты в БД.Похоже, что сообщения об обновлении будут одинаковыми для каждого пользователя, поэтому вместо выполнения вызова БД для каждого отдельного запроса на обновление сохраняйте результаты и разрешайте только 1 дБ запрос в секунду.
2 голосов
/ 14 апреля 2011

Если каждый пользователь с открытой страницей запрашивает loadmore.php каждую секунду, вы быстро поставите сервер на колени (при условии, что у вас более пары пользователей).Подумайте об этом так: если среднестатистический пользователь щелкает ссылку каждую минуту или две, вы увеличиваете нагрузку на сервер в 60-120 раз.

Вам гораздо лучше использовать XMLHttpRequest из AJAX для загрузкидинамический контент.Вам не нужно звонить каждую секунду, чтобы получать оперативные обновления, независимо от того, какую технологию вы решите использовать.

1 голос
/ 14 апреля 2011

Если вы должны делать это каждую секунду (хотя, как и другие, я бы посоветовал вам не делать частые вызовы на сервер), посмотрите на что-то вроде Memcached или APC, чтобы сделать запрос тривиальным вприрода.Не нажимайте на базу данных при каждом запросе, по возможности обслуживайте ее прямо из кэша.

Кроме того, проверьте Long Polling и Node.JS, которые позволили бы создать что-то более реальное в реальном времени.

0 голосов
/ 28 июня 2012

Прочитайте ответы ... а потом я подумал, сколько нужно для обработки трафика на фейсбуке. Или любой другой сайт с такой посещаемостью. Конечно, вам придется правильно обрабатывать трафик, но это не является проблемой само по себе. Это НОРМАЛЬНО, и все это зависит от двух основных факторов: 1) сколько пользователей вы на самом деле планируете обслуживать и 2) насколько мощен ваш сервер

0 голосов
/ 14 апреля 2011

Представь себе это -

Один удар каждую секунду на пользователя 1000 активных пользователей равно 1000 хитов в секунду + весь другой трафик

Я бы сказал, что это убьет большинство серверов. Если вы планируете это сделать, вам потребуется надежное решение для обработки такого типа трафика.

...