HTTP SSE, как сервер поддерживает клиентское соединениеHtml

Программисты Html
Ответить
Anonymous
 HTTP SSE, как сервер поддерживает клиентское соединение

Сообщение Anonymous »

Я использую Debian 13 с Nginx 1.26.3 и SSE (событие, отправленное сервером) и PHP. Чего я пытался достичь, так это иметь много связей с клиентами. Но мне не всегда есть что отправлять клиентам! В документации я прочитал, что сервер должен поддерживать соединение до тех пор, пока не появятся новые данные для отправки. Я сделал это следующим образом:

Код: Выделить всё

while($lastTime == $_SESSION['lastTime']){
sleep(10);
}
В SESSION хранится значение LastTime, когда сервер создал новые данные, а в $lastTime хранится значение LastTime последнего пакета данных, полученного клиентом. Если SESSION['lastTime'] меняется, доступны новые данные.
Но это не работает! Цикл никогда не завершится, поскольку скрипт PHP не может получать новые данные, пока скрипт находится в цикле while. И поэтому SESSION['lastTime'] не будет обновляться!
Я думал, что можно запустить несколько копий одного и того же скрипта. Но, похоже, это не так! Есть ли другой способ сохранить соединение с сервером? Извините, если это простой вопрос, но у меня нет необходимого понимания.
Если одновременно может работать только одна копия, как сервер может поддерживать несколько соединений?
Изменить 2025-12-04
У меня есть один PHP-скрипт, который имеет две функции. Сначала получает данные и сохраняет их в базе данных. Также подготовьте пакет данных для SSE ($_SESSION['sse']) и новую дату для пакета данных ($_SESSION['lastTime']).
Я протестировал его с одним клиентом и обнаружил, что допустил ошибку. Если новые данные недоступны, мне приходится держать клиентское соединение открытым. И я сделал это, запустив цикл while, пока не изменится значение LastTime!
Клиентская сторона работает нормально, но у меня есть проблемы с пониманием того, как сохранять клиентское соединение открытым.
Я понял, что если я сделаю это с помощью цикла while, PHP-скрипт не будет принимать данные, которые отправляются в скрипт примерно каждые 3 минуты. Поэтому SESSION['lastTime'] не обновляется, и скрипт не может выйти из цикла! Я могу это проверить, ведь значения в базе данных скриптом не обновляются.
Я не понимаю, почему не открывается еще одна копия скрипта! В чем причина этого?
Что мне нужно изменить, чтобы сервер мог одновременно поддерживать открытые соединения с несколькими клиентами, а скрипт все еще мог получать обновления от другой программы?
Сессия_start вызывается каждый раз, когда скрипт открывается. Разве невозможно запускать все одни и те же сценарии с одним и тем же идентификатором сеанса, и когда одна копия изменила значение сеанса, это не отображается для уже запущенного сценария.
Извините, я могу писать сценарии PHP, но у меня мало знаний о взаимосвязях между различными функциями.

Подробнее здесь: https://stackoverflow.com/questions/798 ... connection
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Html»