20 сек (клиент отправляет файл размером от 100 мб, сервер отрабатывает этот файл (все это время клиент висит в режиме ожидания). Клиентов может быть несколько. Как все это дело оптимизировать? Есть идея создать пул воркеров, при получении файла от клиента слать этот файл в канал, там уже один из воркеров подхватит и обработает.
Добавляешь таймаут запросов секунд на 10, а загрузку файлов перекладываешь на cdn. /thread А вообще лучше если сервер что-то с файлом делать, то создавать параллельную сессию или таску, чтоб клиент раз в секунд пять спрашивал статус выполнения сессии или таски.
а зачем тут что-то оптимизировать?
> сервер отрабатывает этот файл (все это время клиент висит в режиме ожидания) сорри за мой французский, но вот это пиздец
а что не устраивает, для начала? ))
Вам надо вынести в отложенную обработку файл, например использовать rabbitmq очередь, а клиентке возвращать 202 и ссыль, где ей проверять статус обработки файла вот что то самое простетское для фоновых задач https://github.com/gocraft/work
Что скажите об этом пакете github.com/otium/queue? Планирую использовать для фоновых задач. Очень простой пакет, жаль, что не обновлялся давно :(
Не скажу за этот пакет, так как сам использую https://github.com/Xeoncross/goworkqueue Но если пакет завершён, протестирован и хорошо выполняет свою работу, то он может и не обновляться.
Благодарю, возьму этот же пакет.
Обсуждают сегодня