Я отправляю сообщения json (около 1 КБ каждое) клиенту для отображения, используя поток из php-скрипта, который отправляет сообщение каждые несколько секунд. Все работало нормально в течение многих лет, пока компания не обновила рабочие столы с Windows 7 до Windows 10. Я не думаю, что это изменение само по себе имело значение, но какие бы настройки они ни использовали для подключения к внешнему миру, сообщения не поступали. через (несмотря на то, что соединение успешно установлено браузером), затем около 16 сообщений одновременно.
Поигравшись с отправкой фиктивных сообщений различной длины и просматривая URL-адрес, который является потоком (а не URL-адрес пользовательского интерфейса), становится очевидным, что сообщения хранятся «где-то» до тех пор, пока они не составят 16 КБ, а затем весь много пришло сразу.
Я временно решил эту проблему, дополнив сообщение 15 000 нулями в конце, но очевидно, что это не идеально, так как я сейчас передаю в 16 раз больше данных.
Заголовки, которые я отправляю:
header('Cache-Control: no-cache');
header("Content-Type: text/event-stream\n\n");
header('X-Accel-Buffering: no');
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache\n\n");
за которым следует сообщение и "\n\n".
Можно ли что-нибудь добавить к этому, чтобы данные передавались прямо на клиент в режиме реального времени?
Можете ли вы получить заголовки, которые получает клиент (например, из инструментов разработчика в браузере пользователя)? Там может быть какое-то упоминание о прокси, который они используют. По крайней мере, вы сможете увидеть, удаляются ли некоторые из ваших заголовков.
Заголовок «Transfer-Encoding: chunked» добавляется между тем, как он покидает мой сервер и поступает в клиентский браузер. Такого же заголовка нет, когда смотрю на некорпоративном ПК. Я попытался добавить этот заголовок к своему контенту самостоятельно, указав длину сообщения и используя \r\n, но это, похоже, не имеет никакого значения.