Вот решил заюзать сабж.
Посылаю 20 сообщений с интервалом в секунду.
Если я с виндового компа запускаю curl на этот адрес, то сообщения прекрасно проходят без задержек, одно за одним, с нитервалом в секунду.
Но в браузере (на том же виндовом компе, и хром, и лиса, юзаю обычный EventSource) почему-то я получаю один event open и после этого тишина на те самые 20 секунда, после чего все 20 сообщений прилетают разом.
Что за червие? Кто-нибудь сталкивался?
По идее, если бы это были файрволы и прочие прокси, то в curl была бы та же картина... Или нет?
cURL браузеру рознь. cURL-запрос составлен руками или для чистоты эксперимента скопирован в отладчике с помощью "Copy as cURL"? Каков размер каждого сообщения, и как меняется поведение при весомом увеличении размера сообщения? Применяется ли на сервере компрессия?
Здравствуйте, jazzer, Вы писали:
J>Вот решил заюзать сабж. J>Посылаю 20 сообщений с интервалом в секунду. J>Если я с виндового компа запускаю curl на этот адрес, то сообщения прекрасно проходят без задержек, одно за одним, с нитервалом в секунду. J>Но в браузере (на том же виндовом компе, и хром, и лиса, юзаю обычный EventSource) почему-то я получаю один event open и после этого тишина на те самые 20 секунда, после чего все 20 сообщений прилетают разом.
J>Что за червие? Кто-нибудь сталкивался? J>По идее, если бы это были файрволы и прочие прокси, то в curl была бы та же картина... Или нет?
Здравствуйте, halo, Вы писали:
H>cURL браузеру рознь.
Ну да, в этом и вопрос.
H>cURL-запрос составлен руками ...
просто curl -v server:/stream
H>...или для чистоты эксперимента скопирован в отладчике с помощью "Copy as cURL"? Каков размер каждого сообщения, и как меняется поведение при весомом увеличении размера сообщения? Применяется ли на сервере компрессия?
Сейчас попробую.
Размер маленький.
Попробовал, да, компрессия применяется, в запросе "Copy as cURL" есть --compressed, в ответе Content-Encoding: gzip
С этим что-то можно сделать?
Я просто создаю в JS EventSource(url), там ни слова про компрессию, так что непонятно, откуда этот запрос на компрессию прилетает.
МОжет, можно что-то сделать на стороне сервера? Типа отменить компрессию, или отменить буферизацию даже при включенной компрессии?
Сервер Flask
Здравствуйте, jazzer, Вы писали:
J>Но в браузере (на том же виндовом компе, и хром, и лиса, юзаю обычный EventSource) почему-то я получаю один event open и после этого тишина на те самые 20 секунда, после чего все 20 сообщений прилетают разом.
J>Что за червие? Кто-нибудь сталкивался?
было такое, причина была в том, что сервер применяет сжатие gzip (или аналог). отключили сжатие для таких реквестов стало норм.
Здравствуйте, MadHuman, Вы писали:
J>>Что за червие? Кто-нибудь сталкивался? MH>было такое, причина была в том, что сервер применяет сжатие gzip (или аналог). отключили сжатие для таких реквестов стало норм.
Да, похоже.
У меня сервер на Flask написан, вы не знаете, как в нем можно отключить сжатие для SSE?
Я с ним имею дело второй день, так что для меня это темный лес пока
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, MadHuman, Вы писали:
J>>>Что за червие? Кто-нибудь сталкивался? MH>>было такое, причина была в том, что сервер применяет сжатие gzip (или аналог). отключили сжатие для таких реквестов стало норм.
J>Да, похоже. J>У меня сервер на Flask написан, вы не знаете, как в нем можно отключить сжатие для SSE?
нет, не подскажу. когда мы столкнулись у нас был IIS.
в нём можно настроить что для ответов с контентом типа (Content-Type: text/event-stream) не применять динамическое сжатие.
Я понимаю, что запоздало, и про Flask я ничего нового не скажу. Клиент говорит в Accept-Encoding какие шифры (deflate, gzip, br) он может принять и понять, а сервер вправе выбрать любой (или не принимать вовсе).