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

2 ответа
Да, можно, но это не значит, что нужно.
Для идеи можно сделать петлю сsleep()
внутри цикла, а также сценарий, который проверяет наличие изменений в базе данных, после того, как база данных изменилась, вы возвращаете свое сообщение и выходите из цикла. Однако это оставит на вашем сервере множество процессов и соединений.
Альтернативой является использование websocket, который предназначен для обмена сообщениями в реальном времени и больше подходит для этой задачи.
-
0Огромное спасибо! Solomon P Byer
Нет, я не думаю, что это возможно. PHP не имеет состояния, в отличие от других языков, таких как Node.JS, что означает, что сервер не может сказать клиенту (браузеру), что делать, если клиент специально не запросил это в первую очередь. Браузеры или серверы обычно имеют тайм-аут, поэтому ваш метод общения в чате в реальном времени не будет работать таким образом.
Скорее, я думаю, что ваше единственное решение может заключаться в том, чтобы сделать ваш вызов ajax, например, каждые 0,5 с и спросить сервер, есть ли какое-либо новое сообщение, и если да, вернуть его клиенту.
-
0Вы можете установить тайм-аут на сервере, и клиент действительно вызвал сервер в ajax.
-
0Реально не всегда можно контролировать таймауты. Фактически, у многих общих хостов или веб-серверов есть брандмауэры, которые ограничивают время ожидания, которое вы не можете контролировать, даже если вы заплатили за хостинг. Кроме того, определенно не рекомендуется держать соединение открытым на неопределенный срок только для того, чтобы дождаться ответа. Что делать, если сервер вообще не отвечает? Неужели клиент будет ждать вечно? PHP в первую очередь не подходит для обмена сообщениями в чате в реальном времени, но если вам нужно, вам обязательно следует последовать моему совету, если у вас нет жизнеспособных решений.
Другие вопросы
- Функция клавиатуры работает только один раз для первой буквы ввода2 ответ
У меня есть текстовый ввод, где пользователь вводит желаемое имя страницы<input type='text' id='pageName' name='PageName' class='form-control pageName'> Я пытаюсь использовать функцию keyup для запуска Ajax, чтобы проверить, существует ли страница, однако при вводе чего-то вродеindex Ajax от...
- ajax дважды загружает данные из базы данных с помощью laravel php1 ответ
привет, я пытаюсь загрузить данные из базы данных с помощью ajax. но данные загружаются дважды на страницу html.<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script> $('button').click(function(){ $.ajax({ ...
- Передача значения параметра от кнопки Datatables к функции1 ответ
Я пытаюсь передать значение кнопки в таблице данных функции. Однако я просто получаю значение первой строки. Надеюсь, ты сможешь мне помочь. Мне просто нужно предупредить параметр, а обо всем остальном я позабочусь. вот код memberlist.php<?php header('Content-Type: application/json; Charset="...
- Отображение элементов из базы данных на диаграмме1 ответ
Я хочу отобразить среднее значение результатов по каждой экзаменационной работе в виде диаграммы. Моя проблема в том, что когда я ловлю данные из своей базы данных, я сохраняю их в массиве, чтобы я не мог распечатать эти значения в виде списка массивов, например["a","b","c&q...
- Раскрывающийся список с окном поиска с использованием Bootstrap Selectpicker не работает1 ответ
Я пытаюсь найти поставщика в базе данных, используя средство выбора начальной загрузки в раскрывающемся списке. Я хочу, чтобы при вводе письма в раскрывающемся списке отображалось соответствующее имя из базы данных. Проблема в том, что когда я нажимаю на панель поиска, она не показывает мне список п...
- Я пытаюсь использовать раскрывающийся список выбора для перехода к другим страницам моей разбивки на страницы вместо обычного использования тегов <a>1 ответ
Итак, у меня есть раскрывающийся список выбора, который создается динамически для использования в качестве навигации к другим страницам в скрипте. Он заполняется количеством страниц, к которым нужно перейти. Если я выберу «3», страница будет загружена на страницу «3», но раскрывающийся список не ост...
- Мне нужно передать данные из переменной атрибута id в атрибут href, чтобы завершить маршрут href2 ответ
Я хотел узнать, есть ли у кого-нибудь представление о том, как передать переменную id в другой атрибут в том же теге os из другого тега. Я просто пытаюсь добавить всплывающее окно, чтобы пользователь подтвердил, прежде чем удалять другого пользователя. <a class="deleteUserBTN btn btn-outli...
- Файлы изображений успешно загружены в папку, но имя файла не сохраняется в базе данных1 ответ
Просмотр формы ввода страницы. Я пытался загрузить продукт с изображениями продуктов и выполнить полную операцию с изображениями и деталями продукта. Это форма для получения сведений о продукте и загрузки изображений. <form action="" method="post" id="product_form"&...
- Призрачные глаза в SVG PacMan правильно отображаются в Firefox, но не в других браузерах.1 ответ
Репозиторий GitHub моего SVG PacMan доступен здесь: https://github.com/FlatAssembler/SVG-Pacman Вы можете увидеть это вживую здесь: http://flatassembler.github.io/pacman.html Функция рисования призраков находится здесь: function drawGhost(x, y, color, id, transparent) { //Duhovi su geom...
- Получение имени файла и его значение1 ответ
У меня проблема с загрузкой дубликатов файлов на мой сайт, Однако я хочу, чтобы пока я загружал изображения, если есть повторяющаяся ситуация, имя файла будет image1.jpg, а если больше - image2.jpg. Я сделал это на PHP. Но мне нужно получить точный файл после загрузки, чтобы я мог правильно отправит...

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