Kirill
мы ж вроде не за виртуалки говорили, не?
Quet
ну сервер уровня "виртуалка" или что там продали за 25 евро
Aleksandr
Aleksandr
heavycharged
))
Chebyrash
Друзья, подскажите пожалуйста.
Используя библиотеку net/http, возможно ли отправить GET запрос и грубо говоря забросить его? В стиле UDP не ждать ответа и не принимать response body.
Daniel
если его не принять - та той стороне может случиться ошибка. но можно его принять и проигнорировать, конечно же
Chebyrash
Chebyrash
Если это возможно конечно..
Daniel
не читать body
Chebyrash
Но память для боди все равно аллоцируется?
Daniel
сами данные, конечно, успеют приехать
Daniel
если их не слишком много, и они влезли в буфер
Daniel
буфер? да, это мы не контролируем в go
Chebyrash
Хм. Может тогда руками открывать сокет?
Chebyrash
Хотя это нужно самому делать TCP handshake и тд
Aleksandr
цель-то какая?
Oleg
обязательно GET, HEAD не подойдет?
Artem
а скажите пожалуйста это я дебил или что то не так в консерватории... вот смотрю описание вакансии и skills, как то у меня все это Python, PHP, MySQL, Docker, Kubernetes, Go не сходитсяс 90-115k. Судя по описанию там все прям expert, правда python/php на выбор :)
Chebyrash
цель-то какая?
Отправить серверу HTTP GET и не ждать ответа + даже не аллоцировать под ответ память
Daniel
Daniel
открываешь, отправляешь хедера, закрываешь
Daniel
на той стороне - ошибка, "client closed connection premature"
Aleksandr
Daniel
это tcp handshake
Alexander
Chebyrash
это tcp handshake
Ну так если HTTP поверх tcp, то придётся это самому реализовывать..
Alexander
это уже реализация tcp
Alexander
если сами http пишете поверх готового tcp, то tcp-хэндшейк зачем самому писать?
Vladislav
Chebyrash
Alexander
Логично
Есть риск, что веб-сервер просто прибъёт обработчика этого запроса, если клиент (т.е. ваша программа) закроет соединение. Апач так точно делает.
Vladislav
Логично
Можно еще попробовать ResponseHeaderTimer https://golang.org/pkg/net/http/#Transport в 0 поставить.
Artem
Chebyrash
Chebyrash
Тогда апач не узнает, что сокет закрыт (?)
Petr
Узнает конечно, на стороне сервера это будет выглядеть как клиент бросил коннект
Chebyrash
Alexander
Ограничить и размер ответа тоже. Как только получил первые пару кб - можно и закрыть соединение.
Chebyrash
Chebyrash
Спасибо за подсказки.
Artem
Alexander
Это же просто означает не использовать keepalive. Ответ от сервера то все равно будет отправлен
Petr
Узнает как только он закончит обслуживать запрос, так? То есть обработчик не убьётся.
В апаче, да и не только, есть понятие keepalive, если будет черед постоянных запросов ежесекундно, не дожидающихся ответа, то сервер будет частенько недоступен для клиента. Если Апач будет поднят специально для таких запросов, то можно потюнить поведения для конкретного кейса, но в любом случае, такое поведение неправильно и будет влиять на производительность, если конечно планируется много запросов
Chebyrash
Chebyrash
В апаче, да и не только, есть понятие keepalive, если будет черед постоянных запросов ежесекундно, не дожидающихся ответа, то сервер будет частенько недоступен для клиента. Если Апач будет поднят специально для таких запросов, то можно потюнить поведения для конкретного кейса, но в любом случае, такое поведение неправильно и будет влиять на производительность, если конечно планируется много запросов
То, что нужно 👍
Chebyrash
Пишем свой лоадтестер. Идея отправлять кучу запросов которые долго обрабатываются на сервер и не дожидаться ответа.
Anonymous
Vladimir
Chebyrash
Vladimir
Chebyrash
Chebyrash
Artem
Но обработчик ждёт GET с параметрами..
тогда нужно руками открывать сокет и формировать запрос, а когда сервер пришлет ACK после отсылки FIN сразу закрывать. Точно не помню, там вроде клиент FIN,ACK одновременно шлет и это а линуксе используется, значит что клиент не собирается ждать ответа. Это вроде не нарушает ничего
p.s. не опять путаю, обычный FIN, ASK ждет ответа, а half-duplex termination RST не ждет. но в любом случае это нужно руками все делать
Alexander
А вдруг сервер отвечает 3xx Redirect ? По хорошему load tester должен следовать ему.
Alexander
Ну и всякие там cookie иногда надо сохранять для сессии. Зависит от требоований, конечно.
Artem
вообще проще всего обычным curl отправить запрос и просто выставить connection_timeout какой то очень маленький
Anonymous
Вчера смотрел чат - писали вирус. Сейчас, похожу, дудос систему 😄
freezlite
500-800 строчек кода в го файле это норма?
Daniel
зависит
Daniel
я бы нарезал на несколько - обычно такой объем это уже несколько сущностей
Artem
Daniel
жрет стек
Artem
жрет стек
ну для начала надо упереться в стенку, иначе это какойто оверинжениринг
Daniel
есть несколько паттернов, использование которых надо оправдывать
Мерль
Ну блин, для если у тебя разбор вложенной структуры сжирает при рекурсии весь стек, то у тебя уже другие проблемы начинаются а-ля давайте делать стриминговый json парсер
Artem
Daniel
полный перебор, рекурсия, битовая упаковка...