Может ли php очень долго ждать, прежде чем ответить на запрос ajax

0

Я хотел бы создать чат-сайт, где js AJAX на PHP и PHP ожидают, пока база данных изменится с того, что есть у пользователя, затем он снова отвечает пользователю и пользователю в функции отзыва AJAX на сервере и так далее. Я хотел бы вызвать тот же сервер, на котором хранится запрос на добавление любого чата, который пользователь хочет добавить. Хотелось бы узнать, возможно ли это.

Теги:
CodeFix

2 ответа

1
Лучший ответ

Да, можно, но это не значит, что нужно.

Для идеи можно сделать петлю сsleep() внутри цикла, а также сценарий, который проверяет наличие изменений в базе данных, после того, как база данных изменилась, вы возвращаете свое сообщение и выходите из цикла. Однако это оставит на вашем сервере множество процессов и соединений.

Альтернативой является использование websocket, который предназначен для обмена сообщениями в реальном времени и больше подходит для этой задачи.

Поделиться
Источник
  • 0
    Огромное спасибо!
0

Нет, я не думаю, что это возможно. PHP не имеет состояния, в отличие от других языков, таких как Node.JS, что означает, что сервер не может сказать клиенту (браузеру), что делать, если клиент специально не запросил это в первую очередь. Браузеры или серверы обычно имеют тайм-аут, поэтому ваш метод общения в чате в реальном времени не будет работать таким образом.

Скорее, я думаю, что ваше единственное решение может заключаться в том, чтобы сделать ваш вызов ajax, например, каждые 0,5 с и спросить сервер, есть ли какое-либо новое сообщение, и если да, вернуть его клиенту.

Поделиться
Источник
  • 0
    Вы можете установить тайм-аут на сервере, и клиент действительно вызвал сервер в ajax.
  • 0
    Реально не всегда можно контролировать таймауты. Фактически, у многих общих хостов или веб-серверов есть брандмауэры, которые ограничивают время ожидания, которое вы не можете контролировать, даже если вы заплатили за хостинг. Кроме того, определенно не рекомендуется держать соединение открытым на неопределенный срок только для того, чтобы дождаться ответа. Что делать, если сервер вообще не отвечает? Неужели клиент будет ждать вечно? PHP в первую очередь не подходит для обмена сообщениями в чате в реальном времени, но если вам нужно, вам обязательно следует последовать моему совету, если у вас нет жизнеспособных решений.

Другие вопросы

CodeFix
Цитата дня

"Завидую тестировщикам: все хотят с ними дружить."

Эндрю Таненбаум