Size: a a a

2019 November 06

AE

Andrey Enshin in pro.ruby
@Fedcomp  хочу L7 keep-alive сделать : )
т.е. есть долгодум, который не шлёт данные больше минуты

нужно его заставить как-то слать данные

можно переписать логику приложения так, чтобы chunked encoding
но пока хочется попробовать слать левый хидер, который будет игнорироваться клиентом
источник

AI

Alex Ilizarov in pro.ruby
Тебе не кажется что подвешивать один из воркеров puma на целую минуту это жесть?
источник

AE

Andrey Enshin in pro.ruby
Наверное это плохо, да
источник

AI

Alex Ilizarov in pro.ruby
у тебя там условных 4-8 воркеров, что будет когда ты их всех подвесишь?
источник

AE

Andrey Enshin in pro.ruby
но вопрос сейчас в другом, увы)
источник

AI

Alex Ilizarov in pro.ruby
с временем ожидания в минуту ты их любое количество подвесишь. Переходи на асинхронные запросы.
Один запрос - создать задачу
Другой запрос - проверить статус
источник

AE

Andrey Enshin in pro.ruby
сесть и переписать всё "как надо" долго и нет такого требования
источник

AI

Alex Ilizarov in pro.ruby
можешь написать тупую прослойку которая будет имитировать синхронный ответ
источник

AI

Alex Ilizarov in pro.ruby
Отлично, твой сервис моментально умрет, к кому придут когда это случится? к тебе. Может донести до остальных что архитектурно сейчас - жопа?

Я не знаю требований к твоему приложению, но почти во всех вариантах это лежащий сервис.
источник

AE

Andrey Enshin in pro.ruby
хорошо) спасибо, я, конечно, донесу.
сервис исключительно внутренний, клиентов там не много

если абстрагироваться от проблем сервиса и попробовать решить задачу: послать хидер, до того как начнём слать ответ
что думаешь, есть какое-то решение?

response.headers['X-Foo'] = 'value'
не шлёт хидер сразу

мне бы получить доступ к стриму и туда сделать write
источник

AI

Alex Ilizarov in pro.ruby
> если забить на то что мою машину остановит первый же гаишник подскажите как сделать шахид мобиль

Я на все 100% не уверен но у рельс request-response, т.е оно наверное не начнет слать пока ты не вернешь нормальный response.
Можно глянуть в ActionController Metal и на нижележащий уровень - Rack.
источник

AI

Alex Ilizarov in pro.ruby
> если абстрагироваться от проблем сервиса и попробовать решить задачу

*И попробовать сделать через жопу что будет сложнее чем сделать нормально
источник

AE

Andrey Enshin in pro.ruby
Можно поставить задачу так, чтобы она не смотрелась как шахид мобиль:

у тебя есть стриминговое приложение, которое стримит данные, но иногда оно может задуматься на Х секунд

по пути к клиенту есть балансер, который на L7 смотрит наличие данных и рубит коннект, если данных нет

нужен L7 keep-alive, не TCP
источник

AI

Alex Ilizarov in pro.ruby
Проблема в том что твое приложение не стриминговое, оно синхронное.

Сделай прослойку которая делает то что тебе надо.
источник

AI

Alex Ilizarov in pro.ruby
И пускай условный nginx смотрит на прослойку для конкретного запроса.
источник

AI

Alex Ilizarov in pro.ruby
вообще тебе нужно что то типа rails long polling
источник

AI

Alex Ilizarov in pro.ruby
источник

AI

Alex Ilizarov in pro.ruby
источник

AI

Alex Ilizarov in pro.ruby
источник

AI

Alex Ilizarov in pro.ruby
Ты просто не понимаешь что у тебя серьезненькая проблема и зачем то фокусируешься на том чтобы тупо таску закрыть, а не стабильный сервис сделать.
источник