Это то, что каждый делал когда-то до введения комет и nodejs.
Проблема, как я понимаю, заключается в том, что PHP-запросы на Apache очень дороги.Если ваше приложение чата проверяет наличие сообщений каждую секунду, вы попадаете в ситуацию, когда у Apache недостаточно ресурсов для ответа на запросы.Другая область, которую я считаю нуждающейся в улучшении, - это улучшение контекста вашего чата.
Почему он обновляется каждую секунду, если не для получения новых сообщений?Что делать, если сообщений нет?
Некоторые методы, которые вы можете использовать;
Предоставьте своим клиентам облегченную конечную точку, которая имеет некоторый контекст о сеансе чата.ожидание нового сообщения, сколько сообщений и т. д. Клиент может ответить на это, обновив немедленно или нет, если нет новых сообщений.Эта конечная точка может предоставить простой объект json через http-запрос.Вам гарантируется, что это сообщение о статусе будет иметь фиксированный размер, и если ответ о статусе не изменится, вы можете отклонить его.Смотрите следующее сообщение.
Простой спад в вашем опросе javascript, если клиент получает один и тот же ответ от сервера несколько раз подряд, вы можете увеличить опрос на установленное время, в настоящее время вы сказалиэто было каждую секунду.Если вы это сделаете, вы будете увеличивать каждые 2,4,6,8,10 секунд.Как только ответ от сервера изменяется, вы сбрасываете затухание.
Некоторые варианты оптимизации, которые следует учитывать;
Используйте кэш кода операции PHP, такой как APC.
Установите минимальное время ожидания для всех запросов, вы не хотите, чтобы какие-либо запросы зависали на вашем сервере.
Оптимизируйте свой код PHP, сделайтеон наклонен и быстр.
Запустите несколько нагрузочных тестов, чтобы увидеть свои пределы.
Часто измеряйте производительность, чтобы убедиться, что ваши приложения работают быстрее.
Проверьте журналы apache на наличие признаков общей работоспособности приложения ивремя отклика.
Когда масштабирование становится необходимым, добавьте новый сервер и используйте распределитель нагрузки для распределения запросов.Я использовал Varnish и HAProxy с большим успехом, их настройка тоже не сложна.