Size: a a a

2020 February 28

RS

Roman Sharkov in Go-go!
Vitaly
Ну просить аудит кода это было бы совсем нагло с моей стороны.
Но если вдруг будет время... io.ReadFull в строке 512 периодически читает те самые лишние 2 байта.
https://github.com/vponomarev/libsmpp/blob/master/smpp.go
я вот честно говоря не совсем представляю как именно ReadFull ведёт себя на сокете.

кстати, logrus на высоконагруженной системе не советую, он слишком много мусора создаёт да и в целом не очень шустрый, смотри github.com/globusdigital/logbench

ещё я вижу что ты поля логера постоянно повторяешь.. не легче ли определить логер с контекстом выше а ниже его просто использовать?
источник

RS

Roman Sharkov in Go-go!
Vitaly
Ну просить аудит кода это было бы совсем нагло с моей стороны.
Но если вдруг будет время... io.ReadFull в строке 512 периодически читает те самые лишние 2 байта.
https://github.com/vponomarev/libsmpp/blob/master/smpp.go
да и похоже на то что тут довольно дохера аллокаций 🙂
источник

V

Vitaly in Go-go!
Roman Sharkov
я вот честно говоря не совсем представляю как именно ReadFull ведёт себя на сокете.

кстати, logrus на высоконагруженной системе не советую, он слишком много мусора создаёт да и в целом не очень шустрый, смотри github.com/globusdigital/logbench

ещё я вижу что ты поля логера постоянно повторяешь.. не легче ли определить логер с контекстом выше а ниже его просто использовать?
Ого, спасибо за инфу про логгер, разница существенная. Запланирую смену логгера.
Про контекст пока не думал, у меня в среднем половина полей в рамках вызова функции одинаковая, а вторая в каждом месте отличается.
Но как рабочий вариант - часто запускающиеся запросы (все для уровня trace и часть для debug) я оборачиваю if'ом с проверкой LogLevel, чтобы лишний раз не вызывать логгер.
источник

V

Vitaly in Go-go!
Roman Sharkov
да и похоже на то что тут довольно дохера аллокаций 🙂
Скорее всего :)
С этим мне ещё предстоит разобраться с профайлером в руках.
Сначала функциональные баги полечу, а потом пойду оптимизировать.
источник

AK

Andrey Kolkov in Go-go!
Vitaly
Ого, спасибо за инфу про логгер, разница существенная. Запланирую смену логгера.
Про контекст пока не думал, у меня в среднем половина полей в рамках вызова функции одинаковая, а вторая в каждом месте отличается.
Но как рабочий вариант - часто запускающиеся запросы (все для уровня trace и часть для debug) я оборачиваю if'ом с проверкой LogLevel, чтобы лишний раз не вызывать логгер.
https://github.com/uber-go/zap неплохой логгер, кстати.
источник

ВК

Ваня Кострубин in Go-go!
А кто нибудь использовал promptui для консольных юаек?
Мне очень нужно что бы мог отмечать несколько элементов списка, и что б в итоге они формировались в список с которым я могу что то сделать, например выбрать несколько имен репозиториев и пакетно уже применить к ним действия вроде замены секретов в сиайке.

Но даже порывшись и потыкав примеры - не нашел именно такого
источник

p

pragus in Go-go!
Vitaly
Подскажите, насколько эффективно использовать io.ReadFull при чтении tcpstream'а или лучше читать в буфер всё, что прилетело из сети и потом парсить? Будут грабли с переключением контекста в системном вызове или всё уже закешировано?

Задача - читать бинарный протокол, данные летят в одной tcp сессии, заголовок 16 байт + variable часть, длина которой лежит в заголовке. Читать много, по 50-100k пакетов в секунду (делаю генератор нагрузки), т.е. по 100-200k io.ReadFull'ов в секунду.

Альтернатива - делать read и самому разбираться "что именно получил" разделяя на нужные куски (если получил неполный пакет, то возвращаемся в цикле и продолжаем делать read).
А что, сокет не обернут в bufio.Reader?
источник

Y

Yury in Go-go!
всем привет, может кто-нибудь подсказать чем заменить роутер, сессии и xsrf из beego?)
источник

Y

Yevhenii in Go-go!
Ан
а почему не будет?
Потому что его отсутствие - прекрасно
источник

p

pragus in Go-go!
Vitaly
Кстати, ещё вопрос - второй день бьюсь, не могу понять.

Дано - клиент и сервер, запущены на одной машине под Win10, оба кидают пакеты друг в друга. Клиент кидает пакет под 100 байт, сервер ~20 байт.
Чтение и отправка в разных горутинах.

Периодически (и совсем рандомно) сервер получает 2 лишних байта в потоке (два нуля перед данными, которые должен вычитать ReadFull). Это критическая ошибка для обмена и приходится рвать сессию.

Горутина чтения простая - там два подряд идущих ReadFull, считанные данные скидываются в канал.

Запускал wireshark, там нет этих лишних байт.

Кто-нибудь сталкивался с таким?
Скорее всего не два нуля, а eof
источник

AK

Andrey Kolkov in Go-go!
Yury
всем привет, может кто-нибудь подсказать чем заменить роутер, сессии и xsrf из beego?)
А что за задача там решается?
источник

Y

Yury in Go-go!
Andrey Kolkov
А что за задача там решается?
бэкенд: api, websocket + немножко статики. хтмл шаблоны не надо
источник

AK

Andrey Kolkov in Go-go!
Yury
бэкенд: api, websocket + немножко статики. хтмл шаблоны не надо
Модет тогда вообще поменять все, раз там только api?
источник

Y

Yury in Go-go!
Andrey Kolkov
Модет тогда вообще поменять все, раз там только api?
что значит всё?
источник

V

Vitaly in Go-go!
pragus
Скорее всего не два нуля, а eof
Eof бы словил через err. Там приходят два нуля, а потом уже идут ожидаемые данные. Как будто кто-то в буфер заинжектил эти байты.
источник

AK

Andrey Kolkov in Go-go!
Yury
что значит всё?
https://github.com/qiangxue/go-rest-api например тупо на стартере таком все переписать, раз все равно роутер менять... отличная штука, недавно вышла.
источник

V

Vitaly in Go-go!
pragus
А что, сокет не обернут в bufio.Reader?
Я ж только разбираюсь ;)
Что в примерах нашёл, то и использовал. Почитаю про bufio.
источник

А

Ан in Go-go!
Yevhenii
Потому что его отсутствие - прекрасно
Ловите наркомана
источник

AK

Andrey Kolkov in Go-go!
Yury
что значит всё?
Как по мне, фреймворки не Go way.
источник

Y

Yevhenii in Go-go!
Ан
Ловите наркомана
АТПУСТИ МЕНЯ, КУДА ТЫ КИДАЕШЬ
источник