Twitter любит обновлять, когда в БД добавляются новые строки

У меня есть страница, содержимое получается динамически с помощью php и Mysql. Я использую цикл foreach для отображения всего содержимого.

foreach($data as $key){
            echo "<div id="post_content"> $key['post'] </div>";
      }

Теперь я получаю свой канал в том виде, в каком он есть, но проблема в том, что страницу необходимо обновить, прежде чем вы увидите новые строки сообщений из базы данных. Здесь появляется твиттер, когда вы в твиттере и получаете новое сообщение от кого-то, на кого вы подписаны, он показывает «1 новый твит» в верхней части ленты, когда вы нажимаете на него, он добавляет содержимое твита в корм. Из своего исследования я нашел несколько способов сделать это;

  1. Веб-сокеты. Минусы: Кроссбраузерная совместимость.

  2. Использование AJAX: refresh = setInterval(function(), 5000); Минусы: Ну, скрипт загружается каждые 5 секунд: /

  3. Кто-то порекомендовал мне socket.io, и я все еще ищу, как интегрировать его с php.

У меня такой вопрос: есть ли какой-нибудь другой эффективный (предположительно простой и действенный) способ сделать это? Любая помощь будет принята с благодарностью.


person Saff    schedule 12.01.2013    source источник
comment
Вы не хотите настраивать сокет для каждого соединения, которое у вас может быть. Я бы сделал AJAX. Вы можете улучшить свой сценарий, запретив ему выполнять запросы обновления к серверу после определенного периода бездействия пользователя. Это убережет ваш сервер от атак неактивных пользователей.   -  person Boundless    schedule 12.01.2013
comment
Но эта страница в основном моя домашняя, даже для активных пользователей не будет ли она неэффективной?   -  person Saff    schedule 12.01.2013
comment
Если вы используете сокеты, вы значительно ограничите количество одновременных пользователей, которые может иметь ваш сайт. Существует жесткое ограничение на количество открытых сокетов, и ваш сервер должен выделять ресурсы для того, чтобы эти сокеты оставались открытыми.   -  person Boundless    schedule 12.01.2013
comment
Понимаю, что вы думаете об node.js и socket.io? Подпадает ли он под одну и ту же кошку?   -  person Saff    schedule 12.01.2013
comment
Я никогда не использовал node.js. Суть в том, что вы будете ограничены, если пойдете по любому маршруту, который использует сокеты. Возможно, вас устраивает установка жесткого ограничения на количество одновременных пользователей на вашем сайте. В таком случае выберите решение, в котором используются сокеты. Также ознакомьтесь с этой веткой: stackoverflow.com/questions/1575453/   -  person Boundless    schedule 12.01.2013
comment
Большое спасибо @Boundless :) Нет, думаю, я выберу вариант AJAX, ха-ха   -  person Saff    schedule 12.01.2013
comment
Вам следует. Если для ваших пользователей не важно получать немедленные обновления в реальном времени, бессмысленно использовать сокеты. 5-секундная задержка отлично подойдет для таких вещей, как новые обновления, и это сэкономит вам много ресурсов.   -  person Nutty Nur    schedule 12.01.2013


Ответы (2)


Проблема в том, что все, что связано с сокетами, имеет ограничение на количество соединений, открытых в определенный момент времени. Поэтому, если вы не планируете обслуживать десятки тысяч одновременных дуплексных соединений, вам лучше использовать комбинацию AJAX и JSON с вашим PHP. Я рекомендую вам реализовать интервалы опроса. например, когда пользователь не активен по прошествии определенного времени, увеличьте интервал или предполагая, что ничего нового не появляется для 5-10 опросов, увеличьте интервал, возможно, удваивая его каждый раз, пока он не достигнет, скажем, 2 минут. При получении сообщения или значения уменьшите интервалы до 5 секунд или меньше.

person Tommy Adey    schedule 12.01.2013

Самый простой способ сделать это - предоставить какой-то API, чтобы вы могли получить доступ к новым «твитам» в формате JSON, а затем добавить их в свой HTML.
socket.io также будет хорошим вариантом, поскольку он объединяет несколько такие технологии, как веб-сокеты, длительный опрос и т. д., и при использовании старых браузеров ухудшаются. Вы можете найти множество руководств в Интернете на socket.io. Однако socket.io полагается на JS на стороне сервера node.js, поэтому, если вы не знакомы с этим, это может быть немного сложно. Взгляните на эту ссылку: Использование PHP с Socket.io

person Stefan    schedule 12.01.2013
comment
Спасибо, это просто заставляет меня признать, что мне нужно изучить node.js :( - person Saff; 12.01.2013
comment
Вы по-прежнему можете использовать решение только для PHP, предоставив JSON API, а затем запрашивая его каждые X секунд через AJAX. - person Stefan; 12.01.2013
comment
Да, я думал об этом, но я предполагаю, что это было бы неэффективно. Как я узнаю, что моя учетная запись хостинга позволяет мне использовать node.js, и не могли бы вы порекомендовать хорошее руководство? Спасибо @stefan - person Saff; 12.01.2013
comment
Большинство хостинговых компаний не поддерживают node.js, просто напишите им и спросите. Вы можете найти сотни руководств через Google - person Stefan; 12.01.2013
comment
Есть еще одна неудача, похоже, я пока буду придерживаться AJAX, ха-ха, спасибо за помощь @Stefan, вы сами используете node.js? - person Saff; 12.01.2013